【问题标题】:Mongoose, find item in a documents arrayMongoose,在文档数组中查找项目
【发布时间】:2021-10-22 10:43:51
【问题描述】:

所以我已经通过 id 从 mongoose 查询了一个特定的文档。该文档有一系列项目。此列表将始终非常小(少于 10 项)。我想知道是否有办法从数组中获取特定项目。

示例文档:

{
    _id: 1,
    name: 'some name,
    items: [{
        id: 23,
        name: 'item name 23'
    },{
        id: 24,
        name: 'item name 24'
    }]
}

从 mongoose 文档我可以得到 items 数组:

doc.get('items')

从那里我可以遍历数组并找到我想要的,这没什么大不了的。如果框架中提供了这一点,只是不想重新发明轮子。

【问题讨论】:

  • 如果你知道位置,你可以使用“点符号”(例如'items.0')docs.mongodb.org/manual/core/read-operations/#arrays
  • 我不想按位置找,我要按id找。 IE。 doc.get('items').find(23);当然,这不只是我正在尝试做的一个例子。
  • 我认为解决方案已发布here

标签: node.js mongoose


【解决方案1】:

我认为它会起作用。

Document.findById({docId, 'items.id': 'yourId'}, {'items.$': 1}, function(err, item){

}

【讨论】:

  • 如果它有效,我认为您可以将其作为已接受的答案进行检查。谢谢
  • 是否可以只获取需要的字段?
  • @AryehArmon 我认为您可以像其他任何查询一样包含必要的字段:{ <fieldname>: 1 } 包含字段名,排除其余字段,0 排除字段名。
  • 虽然有效,但最好能解释一下原因。
【解决方案2】:

有一个 id 方法可以做到这一点。

doc.items.id(23)

http://mongoosejs.com/docs/subdocs.html

使用 find 或 findOne 的解决方案可行,但涉及更多代码且更难理解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-01
    • 1970-01-01
    • 2016-01-19
    • 2021-01-13
    • 2019-06-29
    • 2020-06-11
    • 2013-07-15
    相关资源
    最近更新 更多