提问者:小点点

将数据写入Mongodb或更新它,如果它已经在数据库中


所以我试图用Node.js,Discord.js和MongoDB制作一个级别的系统,但是我不知道如何在数据库中添加/更新数据。

下面是我使用的代码,但它不起作用:

if (db.collection(message.guild.id).findOne({ user: message.author.id })) {
 db.collection(message.guild.id).updateOne(
  { user: message.author.id },
  {
   $set: { lastmessage: Date.now() },
  }
 );
} else {
 db.collection(message.guild.id).insertOne({
  user: message.author.id,
  lastmessage: Date.now(),
  level: 0,
  xp: 0,
 });
}

共1个答案

匿名用户

欢迎来到stackoverflow,

首先,db.collection(message.guild.id).findone({user:message.author.id})返回一个promise,因此您必须使用.then()async/await方法,或者使用任何第三方的promise管理器(如果这是您的东西)来正确处理它。

db.collection(message.guild.id).findOne({user: message.author.id}).then((result)=>{
    //Do stuff with result
})

但是您甚至不需要它来解决您的问题:有一种方法可以将对象更新为MongoDB,或者在不存在对象的情况下插入该对象:使用upsert:true选项,请参阅文档:

db.collection.updateOne(
   <filter>,
   <update>,
   {
     upsert: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ],
     hint:  <document|string>        // Available starting in MongoDB 4.2.1
   }
)

您的代码应该如下所示:

db.collection(message.guild.id).updateOne(
     {user: message.author.id},
     {$set: { lastmessage: Date.now()}},
     {upsert:true}
);