MongoDB $lookup 多个条件

MongoDB $lookup with multiple conditions

我在 MongoDB、itemscategories 中有两个合集。
items

{
  _id: "some_id",
  category_A: "foo",
  category_B: "bar",
}

并且categories

{
  _id: "foo_id",
  name: "foo",
  type: "A"  
},
{
  _id: "bar_id",
  name: "bar",
  type: "B"  
}

我正在尝试使用管道通过 $lookup 获取 foo_idbar_id,但我不明白为什么 category_A_out 数组总是 returns空。
这是 category_A:

管道的相关步骤
{
  from: 'categories',
  "let": {
    "category": "$name",
    "type": "$type"
  },
  "pipeline": [{
    "$match": {
      $expr: {
        $and: [
          { $eq: ["$category_A", "$$category"] },
          { $eq: ["$$type", "A"] }
        ]
      }
    }
  }],
  as: 'category_A_out'
}

我确定 foobar 存在于 categories 集合中。

我做错了什么?

let 应该用于声明 LEFT 集合 的变量,即 items.

如果 category_A 包含类别名称,则需要与 name 匹配。

否则与 _id 匹配。

db.items.aggregate([
  {
    $lookup: {
      from: "categories",
      "let": {
        "category_A": "$category_A"
      },
      "pipeline": [
        {
          "$match": {
            $expr: {
              $and: [
                {
                  $eq: [
                    "$name",    // Or Match with $_id if category_A holds id
                    "$$category_A"
                  ]
                },
                {
                  $eq: [
                    "$type",
                    "A"
                  ]
                }
              ]
            }
          }
        }
      ],
      as: "category_A_out"
    }
  }
])

Sample Mongo Playground