具有管道匹配和投影的 $lookup 不适用于 guid

$lookup with pipeline match and projection does not work for guid

我有两个集合,我想根据两个 id 字段使用 $lookup 加入它们。这两个字段都来自 guid 类型,在 mongodb 罗盘中看起来像这样:'Binary('cavTZa/U2kqfHtf08sI+Fg==', 3)'

罗盘聚合管道构建器中的此语法给出了预期的结果:

{
  from: 'clients',
  localField: 'ClientId',
  foreignField: '_id',
  as: 'ClientData'
}

但我想添加一些投影并尝试像这样更改它:

{
  from: 'clients',
  'let': {
    id: '$_id.clients'
  },
  pipeline: [
    {
      $match: {
        $expr: {
          $eq: [
            '$ClientId',
            '$$id'
          ]
        }
      }
    },
    {
      $project: {
        Name: 1,
        _id: 0
      }
    }
  ],
  as: 'ClientData'
}

但这里的结果是集合 'clients' 中的每个客户端都被添加到起始 table 中的每个文档中。我必须使用 MongoDB 3.6,因此 >=5.0 的新查找语法不可用。

对我有什么想法吗? $eq 是否适用于二进制存储的 guid 数据?

在第一个例子中,你说本地字段是ClientId,外国字段是_id。但这不是您在第二个示例中使用的内容。

这应该会更好:

{
  from: 'clients',
  'let': {
    ClientId: '$ClientId'
  },
  pipeline: [
    {
      $match: {
        $expr: {
          $eq: [
            '$$ClientId',
            '$_id'
          ]
        }
      }
    },
    {
      $project: {
        Name: 1,
        _id: 0
      }
    }
  ],
  as: 'ClientData'
}