我正在尝试使用unwind运行查询。 (聚合) 问题是当我在空数组上运行时,我得到空结果。 我知道这是一个问题:
如果数组在输入文档中包含空数组([]),则 管道忽略输入文档,不会输出文档 那个输入文件。 (来自MongoDB文档)
是否有一个选项,只有当我试图放松的数组不为空时才可以'放松'?
编辑:
$match = [
'_id' => ['$in' => $ids]
];
$project = [
'name' => true,
'sum1' => true,
'array1' => true,
'array2' => true,
'array3' => true
];
$group = [
'_id' => '$name',
'sum1' => ['$sum' => '$sum1'],
'array1' => ['$push' => '$array1'],
'array2' => ['$push' => '$array2'],
'array3' => ['$push' => '$array3']
];
$query = [
['$match' => $match],
['$project' => $project],
['$group' => $group],
['$unwind' => '$array1'],
['$unwind' => '$array2'],
['$unwind' => '$array3']
];
$ret = mongo_get_db()
->selectCollection("collection")
->aggregate($query);
EDIT2:
{
name: ‘name1’
sum1: 2
array1:
[
{
id: 111
name: 222
}
]
array2: []
array3: []
}
{
name: ‘name1’
sum1: 10
array1:
[
{
id: 122
name: 333
}
]
array2: []
array3: []
}
结果:
{
name: ‘name1’
sum1: 12
array1:
[
{
id: 111
name: 222
}
{
id: 122
name: 333
}
]
array2: []
array3: []
}
tnx:)
答案 0 :(得分:0)
您可以在$match
之前尝试使用$unwind
运算符来过滤具有至少包含元素的数组的文档,使用至少存在第一个元素索引为0的逻辑数组(使用 dot notation ):
{ $match: { "array_field.0": { $exists: true } } };
答案 1 :(得分:0)
为什么不直接检查数组是否为空?
if(myArray.length === 0) { /* call your code here */ }