所以我试图用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,
});
}
欢迎来到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}
);