mongooseJS在数组中查找带有ID的文档

时间:2018-01-29 10:25:32

标签: mongoose

我需要撤回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

2 个答案:

答案 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,如果您将此作为答案发布,我会将其设为正确,然后投票。 谢谢,我想知道为什么,如果你知道的话。