我需要撤回ID存储在ObjectIds数组中的文档 所以我有一个" id" (123)我希望所有的DOcs都是"租户"有一个数组元素(123)
数据看起来像这样
{
"_id": ObjectId("abc"),
"name": "Miroslav",
"tenants": [
ObjectId("123"),
ObjectId("456")
]
}
{
"_id": ObjectId("abd"),
"name": "Lothar",
"tenants": [
ObjectId("123"),
ObjectId("694")
]
}
当然是mongoDB systax
things.find( { 'tenants': ObjectId(123) } )
工作正常。
Mongoose抱怨
ReferenceError: ObjectId is not defined
所以我试过这个
things.find( { 'tenants': mongoose.Schema.ObjectId(123) } )
在集市上,mongoose返回了所有记录,除了预期的2。
我已经在3年前看过这个问题了,那个帖子没有答案,希望这里有人会有解决方案。
我正在使用" mongoose":" 4.9.8" (由于特定的'承诺'问题,我现在无法上传版本)
THX
答案 0 :(得分:2)
要转换为您需要使用的ObjectId:
things.find({tennants: mongoose.Types.ObjectId("123")});
mongoose.Schema.ObjectId和mongoose.Types.ObjectId之间的区别在于后者是ObjectId构造函数。它甚至可以像:
一样使用var id = new mongoose.Types.ObjectId("123");
创建一个objectId并将其存储在id变量中。
而mongoose.Schema.ObjectId(或mongoose.Schema.Types.ObjectId)引用数据类型。这就是你在架构中使用的内容。与您设置的方式相同
name: String
在模式中,使用mongoose.Schema.Types.ObjectId指定数据类型是mongoose ObjectId。
注意:我记得几个月前在文档中读到这个,但我现在无法找到文档,我认为我的解释相当充分
答案 1 :(得分:0)
rakan316写道 -
试试这个:things.find({tenants:mongoose.Types.ObjectId(“123”)})
这很有效......
rakan316,如果您将此作为答案发布,我会将其设为正确,然后投票。 谢谢,我想知道为什么,如果你知道的话。