猫鼬中奇怪的比较行为

时间:2016-08-22 08:35:33

标签: node.js mongodb mongoose

我错过了什么? 我正在比较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

谢谢托马斯

1 个答案:

答案 0 :(得分:0)

这不是一个真正的答案,因为这是一个错误。

查询时不允许使用字符串,我们必须将其强制转换为mongoDB(thx到@str)。

错误是输入错误(req.user_id => req.user._id

但是为了比较ObjectId,可以更容易地将它们转换为字符串并将它们与==进行比较。