如何从 MongoDb 中的不同文档中获取特定的数组对象

问题描述 投票:0回答:1

我遇到问题了。问题是,我有多个集合,每个集合都有维度字段,其中包含不同维度的对象数组。该系列如下所示。

现在我只需要通过 slug 返回数组中的特定对象,id 可以来自多个文档。

我一直在使用下面的查询进行过滤,但它返回给我整个文档。这是我的查询

db.dimensions.find({
    "dimension.dimensionChildSlug": { $in: ["spring", "formal"] } 
}).select({ dimension: 1 })

但是预期的结果应该是这样的,只有数组中与 slug 匹配的项目才会被检索。

[
    {
      "isDeleted": false,
      "isArchived": false,
      "_id": {
        "$oid": "6423b71df226c91a55d756bb"
      },
      "dimensionChild": "Spring",
      "dimensionChildToLower": "spring",
      "dimensionChildSlug": "spring"
    },
{
      "isDeleted": false,
      "isArchived": false,
      "_id": {
        "$oid": "6423cde4f4db0d397b22390b"
      },
      "dimensionChild": "Wedding",
      "dimensionChildToLower": "wedding",
      "dimensionChildSlug": "wedding"
    }
]

请找收藏

[{
  "_id": {
    "$oid": "6423b6faf226c91a55d756b9"
  },
  "isDeleted": false,
  "isArchived": false,
  "dimensionType": "Collections",
  "dimensionTypeSlug": "collections",
  "dimensionTypeToLower": "collections",
  "dimension": [
    {
      "isDeleted": false,
      "isArchived": false,
      "_id": {
        "$oid": "6423b71df226c91a55d756bb"
      },
      "dimensionChild": "Spring",
      "dimensionChildToLower": "spring",
      "dimensionChildSlug": "spring"
    },
    {
      "isDeleted": false,
      "isArchived": false,
      "_id": {
        "$oid": "6423b723f226c91a55d756bc"
      },
      "dimensionChild": "Summer",
      "dimensionChildToLower": "summer",
      "dimensionChildSlug": "summer"
    }
  ],
  "createdAt": {
    "$date": "2023-03-29T03:56:42.370Z"
  },
  "updatedAt": {
    "$date": "2023-03-29T03:57:23.419Z"
  },
  "__v": 0
},{
  "_id": {
    "$oid": "6423cddbf4db0d397b22390a"
  },
  "isDeleted": false,
  "isArchived": false,
  "dimensionType": "Occassions",
  "dimensionTypeSlug": "occassions",
  "dimensionTypeToLower": "occassions",
  "dimension": [
    {
      "isDeleted": false,
      "isArchived": false,
      "_id": {
        "$oid": "6423cde4f4db0d397b22390b"
      },
      "dimensionChild": "Wedding",
      "dimensionChildToLower": "wedding",
      "dimensionChildSlug": "wedding"
    },
    {
      "isDeleted": false,
      "isArchived": false,
      "_id": {
        "$oid": "6423ce0af4db0d397b22390c"
      },
      "dimensionChild": "Business Casual",
      "dimensionChildToLower": "business casual",
      "dimensionChildSlug": "business-casual"
    },
    {
      "isDeleted": false,
      "isArchived": false,
      "_id": {
        "$oid": "6423ce18f4db0d397b22390d"
      },
      "dimensionChild": "Formal",
      "dimensionChildToLower": "formal",
      "dimensionChildSlug": "formal"
    }
  ],
  "createdAt": {
    "$date": "2023-03-29T05:34:19.300Z"
  },
  "updatedAt": {
    "$date": "2023-03-29T05:35:20.294Z"
  },
  "__v": 0
}]

谁能帮我解决这个问题。

谢谢。

node.js mongodb mongoose nosql
1个回答
0
投票

我想你想用

$filter

db.collection.aggregate([
  {$match: {
      "dimension.dimensionChildSlug": {$in: ["spring", "formal"]}
  }},
  {$project: {
      dimension: {$filter: {
          input: "$dimension",
          cond: {$in: ["$$this.dimensionChildSlug", ["spring", "formal"]]}
      }}
  }}
])

游乐场示例中查看它是如何工作的

© www.soinside.com 2019 - 2024. All rights reserved.