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
我有 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