如何在 MongoDB 中使相同的 collection 内连接等效?

How to make same collection inner join equivalent in MongoDB?

我有 collection 看起来像 EAV(或一些 key/value):

{domain_id: 1, key: "A", value: 1}
{domain_id: 1, key: "B", value: 2}
{domain_id: 1, key: "C", value: 3}

{domain_id: 2, key: "A", value: 5}
{domain_id: 2, key: "B", value: 2}
{domain_id: 2, key: "C", value: 3}

{domain_id: 3, key: "C", value: 3}

我需要找到所有 domain_id 具有 key = "A" AND value = 1 并且还具有 key = "C" AND value = 3(交集,而不是 OR 条件)的所有 domain_id,因此假定的结果将是:

{domain_id: 1}
  1. $group - 在 data 字段中按 domain_id$push 文档分组。
  2. $match - 使用 $and 进行多重比较,$elemMatch 匹配数组元素中的字段值。
  3. $project - Select domain_id.
db.collection.aggregate([
  {
    $group: {
      _id: "$domain_id",
      data: {
        $push: "$$ROOT"
      }
    }
  },
  {
    $match: {
      $and: [
        {
          "data": {
            $elemMatch: {
              "key": "A",
              "value": 1
            }
          }
        },
        {
          "data": {
            $elemMatch: {
              "key": "C",
              "value": 3
            }
          }
        }
      ]
    }
  },
  {
    $project: {
      domain_id: "$_id"
    }
  }
])

Sample Mongo Playground