Mongodb 数组与嵌入文档列表的交集

Mongodb Intersection of array with list of embedded documents

我会解释确切的用例

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

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

类似上面的内容。所以我想获取那些过滤数据字段中评级与给定数组匹配的记录的记录,以及 return 评级与数组中的记录匹配的记录

预期输出:

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

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

如果问题不清楚或者您希望我添加任何具体数据,请告诉我。谢谢

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

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

Mongo playground