mongo 聚合 $lookup 与数组
mongo aggregation $lookup with arrays
我有这样的结构
unions { // collection
members { // array
instanceId // some id
...
}
...
}
在文档中,我有 ids 属性(数组)
我需要从 ids(基本上是 $in)
中查找至少有一个 id 的所有联合
问题是它不起作用
首先我想试试这个变体
{
from: 'unions',
let: { instanceIds: '$ids' },
as: 'unions',
pipeline: [
{
$match: { 'members.instanceId': { $in: '$$instanceIds' } },
},
],
}
但是我们不能在这里使用聚合变量。为此,我们需要使用 $expr
{
from: 'unions',
let: { instanceIds: '$ids' },
as: 'unions',
pipeline: [
{
$match: {
$expr: {
$in: ['$members.instanceId', '$$instanceIds']
}
},
},
],
}
但是呢returns0个文件。 instanceIds 数组不为空,我已经检查过了。
另外,如果我在没有 $expr 的示例中粘贴一个包含值的数组,那么它 returns 是正确的值。所以最有可能的问题是我如何构建这个 $lookup.
使用 { $ne: [{ $setIntersection: ['$members.instanceId', '$$instanceIds'] }, []] }
{
from: 'unions',
let: { instanceIds: '$ids' },
as: 'unions',
pipeline: [
{
$match: {
$expr: {
cond: { $ne: [{ $setIntersection: ['$members.instanceId', '$$instanceIds'] }, []] },
},
},
},
],
}
我有这样的结构
unions { // collection
members { // array
instanceId // some id
...
}
...
}
在文档中,我有 ids 属性(数组) 我需要从 ids(基本上是 $in)
中查找至少有一个 id 的所有联合问题是它不起作用
首先我想试试这个变体
{
from: 'unions',
let: { instanceIds: '$ids' },
as: 'unions',
pipeline: [
{
$match: { 'members.instanceId': { $in: '$$instanceIds' } },
},
],
}
但是我们不能在这里使用聚合变量。为此,我们需要使用 $expr
{
from: 'unions',
let: { instanceIds: '$ids' },
as: 'unions',
pipeline: [
{
$match: {
$expr: {
$in: ['$members.instanceId', '$$instanceIds']
}
},
},
],
}
但是呢returns0个文件。 instanceIds 数组不为空,我已经检查过了。 另外,如果我在没有 $expr 的示例中粘贴一个包含值的数组,那么它 returns 是正确的值。所以最有可能的问题是我如何构建这个 $lookup.
使用 { $ne: [{ $setIntersection: ['$members.instanceId', '$$instanceIds'] }, []] }
{
from: 'unions',
let: { instanceIds: '$ids' },
as: 'unions',
pipeline: [
{
$match: {
$expr: {
cond: { $ne: [{ $setIntersection: ['$members.instanceId', '$$instanceIds'] }, []] },
},
},
},
],
}