【发布时间】:2020-08-09 22:10:04
【问题描述】:
我有一个不和谐的机器人,它想将带有城市名称的不和谐用户 ID 存储在数据库中。用户将键入命令 !storeme [城市名称],机器人将在集合中创建一个新文档。例如,ID 为 123456789 的用户键入命令 !storeme London:
{
"userid": 123456789,
"cityname": "London"
}
然后存储在集合中。
但是,我只希望每个用户都有一个条目 - 这是无法更改的。因此,当用户键入命令时,会根据数据库检查他们的用户 ID,以确保它尚未与城市关联。这就是我的问题所在。
function checkUserIdInDatabase(userID){
const collection = db.collection("UserToCity")
var result = collection.findOne({"userid": userID}, function(err, db){
return !!result // True if the user already exists in the database
})
}
function storeme(user, cityname){
// Do some data verification stuff here
if (checkUserIdInDatabase(user.userID)){
console.log("User already in the database!")
} else {
addUserToDatabase(user, cityname) // This function is known to work
}
}
我的问题是条件 if (checkUserIdInDatabase(user.userID)) 总是返回 false,即使用户存在于数据库中。如果我将逻辑放在 collection.findOne() 匿名函数中,那么它可以很容易地确定这一点。
然后我认为问题在于storeme 中的承诺checkUserIdInDatabase 尚未解决。
我的问题是如何让函数storeme 判断用户是否存在于数据库中?我可以将collection.findOne() 移动到storeme 并在匿名函数中运行所有逻辑,但这感觉很笨拙。
【问题讨论】:
标签: javascript node.js mongodb discord