Elf*_*erg 29 mongoose mongodb node.js
我有一个简单的工具来构建文档集合,然后自动格式化为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]
Run Code Online (Sandbox Code Playgroud)
Offrefs没有指定它所引用的内容,因为我希望能够在其他绑定器中包含一些绑定器,以创建逻辑集合:"这些是用于打印机","这些是用于epub","这些只是web, "等等(我把所有杂项都删掉了.)
不幸的是,我遇到了查询,对于检索到的对象
(story._id == offref.ref) -> True
Run Code Online (Sandbox Code Playgroud)
这两个确实看起来一样.但:
(binder._id == offref.ref) -> False
(String(binder._id) == String(offref.ref)) -> True
Run Code Online (Sandbox Code Playgroud)
并且最后两个中两个引用的视觉比较,它们是相同的ID号,但是ObjectId对象没有正确比较.
我不想不断地进行字符串转换,这在我将这些复杂对象转换为数据树时非常有可能.树关系是任何数据库中的熊; 他们在MongoDB中应该不难.
你如何在MongoDB中进行ObjectId比较?
Joh*_*yHK 85
直接==(或===)比较将通过引用比较两个对象,而不是值.因此,只有当它们都引用同一个实例时才会评估为true.
相反,您应该使用比较其值的equals方法ObjectID:
story._id.equals(offref.ref)
Run Code Online (Sandbox Code Playgroud)
正如@bendytree在评论中指出的那样,如果任一值都可以为null(并且您希望空值比较相等),那么您可以使用以下代码:
String(story._id) === String(offref.ref)
Run Code Online (Sandbox Code Playgroud)