我有一个简单的工具,用于构建文档集合,然后自动格式化它们以用于 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)
https://stackoverflow.com/questions/11060213/
相关文章:
mongodb - 在 mongodb 和 pymongo 中测试空字符串
mongodb - 使用 pyMongo 创建 ISODate
node.js - 按日期时间字段获取最新的 MongoDB 记录
c# - 如何将 BsonDocument 对象反序列化回类
mongodb - 如何在 Mongoose Schema 中表示 MongoDB GeoJSON
python - 使用 PyMongo 将 Pandas 数据框插入 mongodb
node.js - 使用 Mongoose (MongoDB) 查询嵌套文档
java - 为 MongoDB Java 驱动程序配置日志记录