我错过了什么? 我正在比较3个对象:
userID
在模型搜索中被拉出
req.user._id
是包含用户ID的会话变量
和docs[i].toWho
指向相同的ID。
当我比较它们时,我得到假阴性。为什么呢?
起初我认为比较失败是因为docs[i].toWho
是一个猫鼬objectID而其他是字符串,所以我将它们转换为mongoose objectIDs。
但结果仍然失败。见输出:
57a8d7f189d00bfc1917187e 57a8d7f189d00bfc1917187e 57a8d7f189d00bfc1917187e
false false true
false false true
代码:
console.log(docs[i].toWho,req.user._id,userID)
console.log(docs[i].toWho==req.user._id,docs[i].toWho==userID,req.user._id==userID)
console.log(docs[i].toWho==mongoose.Types.ObjectId(req.user._id),docs[i].toWho==mongoose.Types.ObjectId(userID),mongoose.Types.ObjectId(req.user._id)==mongoose.Types.ObjectId(userID))
修改
当我尝试调试更新查询时,这一切都发生了。
Notification.update({
toWho: req.user_id
}, {
$set: { seen: true }
}, {
multi: true
}, function (err,count) {});
没有记录更新。所有记录仍显示seen=false
修改2
事实证明,我的代码中有一个拼写错误。我用户req.user_id而不是req.user._id
谢谢托马斯
答案 0 :(得分:0)
这不是一个真正的答案,因为这是一个错误。
查询时不允许使用字符串,我们必须将其强制转换为mongoDB(thx到@str)。
错误是输入错误(req.user_id
=> req.user._id
)
但是为了比较ObjectId,可以更容易地将它们转换为字符串并将它们与==
进行比较。