从对象数组聚合输出特定结果 - MongoDB

Output a specific result from array of objects aggregation - MongoDB

我的数据如下所示:

{
  "_id": ObjectId("620ca4e292a990273446cf7b"),
  "data": [
    {
      "flagging": "BUSINESS",
      "information": [
        {
          "room": 1,
          "status": "AVAILABLE"
        },
        {
          "room": 2,
          "status": "BUSY"
        }
      ]
    },
    {
      "flagging": "PRIVATE",
      "information": [
        {
          "room": 1,
          "status": "AVAILABLE"
        },
        {
          "room": 2,
          "status": "CLEANING"
        }
      ]
    },
    {
      "flagging": "PUBLIC",
      "information": [
        {
          "room": 1,
          "status": "SERVICE"
        },
        {
          "room": 2,
          "status": "AVAILABLE"
        }
      ]
    }
  ],
  "createdAt": "2022-02-16T07:16:50.674Z"
}

我正在尝试做一个服务,是否用户可以输入某个标记,结果会显示具有相应标记的数据。我尝试使用下面的代码,但我得到的是所有数据,而不是过滤后的数据。

db.coll.aggregate([
    {
        $match: { _id: ObjectId("620ca4e292a990273446cf7b") },
    },
    {
        $project: { _id: 0, "data": 1 }
    }
])

我应该在代码中更改什么才能得到以下结果(如果请求的标记是 BUSINESS 和 PUBLIC)?

{
  "data": [
    {
      "flagging": "BUSINESS",
      "information": [
        {
          "room": 1,
          "status": "AVAILABLE"
        },
        {
          "room": 2,
          "status": "BUSY"
        }
      ]
    },
    {
      "flagging": "PUBLIC",
      "information": [
        {
          "room": 1,
          "status": "SERVICE"
        },
        {
          "room": 2,
          "status": "AVAILABLE"
        }
      ]
    }
  ]
}

感谢您的帮助

您需要 $filter$project 阶段过滤 data 数组中的嵌套文档,其中 flagging["BUSINESS", "PUBLIC"] 内。

{
  $project: {
    _id: 0,
    data: {
      "$filter": {
        "input": "$data",
        "cond": {
          $in: [
            "$$this.flagging",
            [
              "BUSINESS",
              "PUBLIC"
            ]
          ]
        }
      }
    }
  }
}

Sample Mongo Playground