【问题标题】:mongooseJS find docs with IDs in an arraymongooseJS 在数组中查找具有 ID 的文档
【发布时间】:2018-09-10 15:58:56
【问题描述】:

我需要提取 ID 存储在 ObjectIds 数组中的文档 所以我有一个“id”(123),我想要所有“租户”的数组元素为(123)的文档

数据看起来像这样

{
  "_id": ObjectId("abc"),
  "name": "Miroslav",
  "tenants": [
    ObjectId("123"),
    ObjectId("456")
  ]
}

{
  "_id": ObjectId("abd"),
  "name": "Lothar",
  "tenants": [
    ObjectId("123"),
    ObjectId("694")
  ]
}

当然是 mongoDB 系统税

things.find( { 'tenants': ObjectId(123) } )

工作得很好。

猫鼬抱怨

ReferenceError: ObjectId is not defined

所以我尝试了这个

things.find( { 'tenants': mongoose.Schema.ObjectId(123) } )

在一个集市上,猫鼬返回了所有记录,除了预期的 2 条记录。

我在 3 年前看到过这个问题,但那个帖子没有答案,希望这里有人能提供解决方案。

我正在使用“mongoose”:“4.9.8”(由于特定的“承诺”问题,我目前无法升级版本)

谢谢

【问题讨论】:

  • 你能显示架构的租户部分吗?
  • 租户是用户 - 父/子关系......租户ID是指不同文档的_id。
  • 试试这个:things.find({ tenants: mongoose.Types.ObjectId("123") })

标签: mongoose


【解决方案1】:

要转换为您需要使用的 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。

注意:我记得几个月前在文档中读过这篇文章,但我现在无法找到文档,但我认为我的解释相当充分

【讨论】:

  • 足够让我知道我在挖掘时阅读的内容。谢谢。
【解决方案2】:

rakan316 写道 -

试试这个:things.find({ 租户:mongoose.Types.ObjectId("123") })

而且效果很好……

rakan316,如果您将此作为答案发布,我将使其正确,并投票。 谢谢,我想知道为什么,如果你知道的话。

【讨论】:

  • 给我一秒钟再找到文档,然后我会发布完整的答案
猜你喜欢
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 2012-01-08
  • 1970-01-01
相关资源
最近更新 更多