具有管道匹配和投影的 $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'
}
我有两个集合,我想根据两个 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'
}