繁体   English   中英

使用 mongoose 在 object 数组中查找嵌套的 object

[英]Finding a nested object in an array of object using mongoose

{
  _id: new ObjectId("61da0ab855483312e8f4483b"),
  products: [
    {
      createdAt: 2022-01-08T22:05:44.635Z,
      _id: new ObjectId("61da0ab855483312e8f4483c"),
      productCode: 'otf',
      productName: 'facebookmeta',
      claims: [Array],
      permissions: []
    },
    {
      createdAt: 2022-01-08T22:05:44.635Z,
      _id: new ObjectId("61da0ab855483312e8f4483f"),
      productCode: '4pf',
      productName: 'twitteroauth',
      claims: [Array],
      permissions: [Array]
    }
  ],
  __v: 0
}

现在,我一直在尝试使用 find() 和 findOne 方法从该数组中仅获取一个 object ,但没有任何运气。 如果我在某些条件下通过,它仍然会最终给我一个包含两个对象的数组。 我只想能够动态传递属于数组中单个 object 的条件并检索该 object

MongoDB 正在对集合应用查询条件并返回结果与匹配的文档。 由于twitteroauthfacebookmeta两个产品都是同一文档的一部分,因此将返回整个匹配文档。

如果您只需要文档中的单个匹配条目,则可以使用 MongoDB 聚合管道(带有 $unwind),您可以在其中修改结果集。

例如:

db.collection_name.aggregate([
   {
     "$match": {
        // pass matching criteria/conditions here
     }
   },
   {
      "$unwind": "$products" //to deconstruct products field in the result
   },
   {
     "$match": {
        "products.productName": "twitteroauth"
     }
   }
])

请注意,第二个匹配条件用于在解构的结果集上添加其他匹配条件/条件,以便可以过滤产品。

这将为您提供如下结果:-

{
  _id: new ObjectId("61da0ab855483312e8f4483b"),
  products: {
    createdAt: 2022-01-08T22:05:44.635Z,
    _id: new ObjectId("61da0ab855483312e8f4483f"),
    productCode: '4pf',
    productName: 'twitteroauth',
    claims: [Array],
    permissions: [Array]
  },
  __v: 0
}

参考: https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM