我有一个简单的工具,用于构建文档集合,并自动将它们格式化为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并没有指定它所引用的内容,因为我希望能够将一些绑定器包含在其他绑定器中,以创建逻辑集合:“这些是用于打印机的”,“这些是用于epub的”,“这些仅用于Web”等(我已经剥离了所有杂项内容)。
不幸的是,我遇到了一些查询,在其中对于检索到的对象,
(story._id == offref.ref) -> True
它们确实看起来相同,但是:
(binder._id == offref.ref) -> False
(String(binder._id) == String(offref.ref)) -> True
在最后两个引用中,它们包含的是同一个ID号码,但是ObjectId
对象却不能正确地进行比较。同时,以下是这两种引用的可视化比较。
我不想一直进行字符串转换,但当我将这些复杂对象转换为数据树时,这是很有可能的。在任何DB中,树形关系都很麻烦; 但在MongoDB中应该不难。
如何在MongoDB中进行ObjectId比较?
mongoose.Schema.Types.ObjectId
实际上只用于在模式定义中作为字段类型元数据。 - JohnnyHK.equals()
会抛出异常。String(...) == String(...)
似乎是最安全的选项。 - bendytree