node.js - 比较 Mongoose _id和字符串

我有一个 node.js 应用程序,它提取一些数据并将其粘贴到一个对象中,如下所示:

var results = new Object();

User.findOne(query, function(err, u) {
    results.userId = u._id;
}

当我根据存储的 ID 执行 if/then 时,比较永远不会正确:

if (results.userId == AnotherMongoDocument._id) {
    console.log('This is never true');
}

当我对两个 id 进行 console.log 时,它们完全匹配:

User id: 4fc67871349bb7bf6a000002 AnotherMongoDocument id: 4fc67871349bb7bf6a000002

我假设这是某种数据类型问题,但我不确定如何将 results.userId 转换为会导致上述比较为真的数据类型,而我的外包大脑(又名 Google)一直无法帮助。

最佳答案

Mongoose 使用 mongodb-native 驱动程序,该驱动程序使用自定义 ObjectID 类型。您可以将 ObjectID 与 .equals() 方法进行比较。以您的示例为例,results.userId.equals(AnotherMongoDocument._id)。 ObjectID 类型还有一个 toString() 方法,如果您希望以 JSON 格式或 cookie 存储 ObjectID 的字符串化版本。

如果你使用 ObjectID = require("mongodb").ObjectID (需要 mongodb-native 库)你可以检查 results.userId 是否是一个有效的标识符results.userId instanceof ObjectID.

等等

https://stackoverflow.com/questions/11637353/

相关文章:

database - MongoDB 中的 findAndModify 和 update 有什么区别

datetime - 在 mongodb 中存储日期/时间的最佳方法

mongodb - 减少 MongoDB 数据库文件大小

mongodb - 在两个不同的集合中生成重复的 Mongo ObjectId 的可能性?

mongodb - 无法启动 mongodb 本地服务器

MongoDB - 管理员用户未授权

mongodb - 更改 MongoDB 数据存储目录

mongodb - DynamoDB 与 MongoDB NoSQL

mongodb - MongoDB 的命名约定是什么?

macos - mongodb,macos - 限制警告