首页 > 解决方案 > Mongodb数组与嵌入文档列表的交集

问题描述

我将解释确切的用例

我有一个数组,可以说ratings = [1,2,3,4] 我有一个 MongoDB 记录

  {
    "_id": "1232123",
    "data": [
      {
        "rating": 1,
        "reviewed_on": "datetime"
      },
      {
        "rating": 5,
        "reviewed_on": "datetime"
      }
    ]
  }

类似上面的东西。所以我想获取那些过滤数据字段中其评级与给定数组匹配的记录的记录,并返回评级与数组中的记录匹配的记录

预期输出:

{"_id": '1232123', "data": [{"rating": 1, "reviewed_on": "datetime"}]}

我能想到的一种方法是获取所有结果,然后在应用程序级别对其进行过滤,但集合很大,所以我假设在数据库级别处理它。

如果问题不清楚,如果您希望我添加任何特定数据,请告诉我。谢谢

标签: mongodbaggregationintersection

解决方案


有很多方法可以做到这一点,我展示了一种使用方法filter

[{
    $match: {
        _id: "1232123"
    }
}, {
    $project: {
        data: {
            $filter: {
                input: "$data",
                cond: {
                    $in: ["$$this.rating", [1, 2, 3, 4]]
                }
            }
        }
    }
}]

蒙古游乐场


推荐阅读