MongoDB $lookup - localfield 的条件值?

MongoDB $lookup - conditional value for localfield?

我有 2 个集合要使用查找合并。

集合 1:_AddressSyncStatus 我想从这个集合中使用的字段:“地址”

集合 2:EthTokenTransfers 我想从此集合中使用的字段:“to_address”、“from_address”、

现在当我使用 mongo 罗盘时,查找过滤器需要一个本地字段,在我的例子中是 EthTokenTransfers 的本地字段加入集合。我现在的问题是,我想查找 _AddressSyncStatus 中的地址是 EthTokenTransfers.from_address 或 EthTokenTransfers.to_address.

这可以使用聚合吗?

{
from: '_AddressSyncStatus',
localField: 'string', //from_address OR to_address
foreignField: 'address',
as: 'synced_address'
}

一种方法是使用 $lookup 管道和 $or:

db.EthTokenTransfers.aggregate([
  {
    $lookup: {
      from: "_AddressSyncStatus",
      let: {
        from_address: "$from_address",
        to_address: "$to_address"
      },
      pipeline: [
        {
          $match: {
            $expr: {$or: [{$eq: ["$_id", "$$from_address"]},
                {$eq: ["$_id", "$$to_address"]}
              ]
            }
          }
        }
      ],
      as: "synced_address"
    }
  }
])

如你所见here

但我认为对于使用这些数据的第一个工作,这样会更方便:

db.EthTokenTransfers.aggregate([
  {
    $lookup: {
      from: "_AddressSyncStatus",
      localField: "from_address",
      foreignField: "_id",
      as: "synced_address_from"
    }
  },
  {
    $lookup: {
      from: "_AddressSyncStatus",
      localField: "to_address",
      foreignField: "_id",
      as: "synced_address_to"
    }
  }
])

如你所见here