node.js - Mongoose:ObjectId 比较失败不一致

标签 node.js mongodb mongoose

我有一个简单的工具,用于构建文档集合,然后自动格式化它们以用于 EPUB 或 LaTeX 渲染,它是在 ExpressJS 之上编写的。我正在使用 Coffeescript,如果这很重要(我对此表示怀疑)。

使用 Mongoose ,我有以下几点:

DocumentSchema = new Schema
    title:     String

Offrefs = new Schema
    ref:       { type: ObjectId }
    isa:       String

BinderSchema = new Schema
    title:     String
    contains:  [Offrefs]

Offrefs 没有指定它所指的内容,因为我希望能够在其他 Binder 中包含一些 Binder ,以创建逻辑集合:“这些用于打印机”、“这些用于 epub”、“这些是仅限网络,”等等(我已经去掉了所有杂项。)

不幸的是,我遇到了检索对象的查询

(story._id == offref.ref) -> True 

而且两者确实看起来一样。但是:

(binder._id == offref.ref) -> False
(String(binder._id) == String(offref.ref)) -> True

并且对最后两个中的两个引用进行视觉比较,它们相同的 ID 号,但是 ObjectId 对象没有正确比较。

我不想不断地进行字符串转换,当我将这些复杂的对象转换为数据树时,这是一个很大的可能性。树关系在任何数据库中都是熊;它们在 MongoDB 中应该不难。

如何在 MongoDB 中进行 ObjectId 比较?

最佳答案

直接的==(或===)比较将通过引用而不是值来比较两个对象。因此,只有当它们都引用同一个实例时,才会评估为 true。

相反,您应该使用 equals ObjectID 的方法来比较它们的值:

story._id.equals(offref.ref)

正如@bendytree 在评论中指出的那样,如果任何一个值都可以为空(并且您希望空值比较相等),那么您可以改用以下内容:

String(story._id) === String(offref.ref)

关于node.js - Mongoose:ObjectId 比较失败不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11060213/

相关文章:

javascript - Express JS - 无法将数组推送到 MongoDB 中的表

javascript - 使用 Node.js 使用数据库值生成动态 word 文档

javascript - Node.js 和 MongoDB 中的并发请求处理

node.js - 在 Mongoose 中填充后查询

javascript - 在 Node.js 中的异步函数中填充数组

javascript - 如何将数据从 * .ejs 文件传输到 app.js 并处理 app.js 文件上的 HTML 标记上的单击事件

javascript - S3 Node.js SDK,LastModified 日期格式?

javascript - 实现 nodejs es 6 时遇到错误

node.js - 运行 API 调用时出现 TypeError : schema[parameter]. validateAsync?

node.js - 在 Mongoose 中将数组更新到文档中