jpm*_*yob 2 arrays mongodb aggregation-framework
我有一个简单的文档,为用户存储对象数组,我希望获得这些数组的总和以及所有数组的总和;挑战在于某些文档缺少其他文档具有的字段,这导致我的聚合查询失败。
文档看起来像这样。
{
name: '',
type: '',
cars: [],
boats: [],
planes: []
}
Run Code Online (Sandbox Code Playgroud)
有些人没有船或飞机......这些文件可能看起来像
{
name: '',
type: '',
cars: []
}
Run Code Online (Sandbox Code Playgroud)
所以当我运行我的聚合时
[
{
'$match': {
'type': 'big_spender'
}
}, {
'$project': {
'name': '$name',
'cars': {
'$size': '$cars'
},
'boats': {
'$size': '$boats'
},
'planes': {
'$size': '$planes'
}
}
}, {
'$addFields': {
'total_vehicles': {
'$add': [
'$cars', '$boats', '$planes'
]
}
}
}
]
Run Code Online (Sandbox Code Playgroud)
我收到错误:“$size 的参数必须是数组,但类型为:缺失”
我很确定我可以使用 $exists 来避免这个问题,并返回 0,但我不知道该语法可能是什么样子。
我需要为不存在的数组返回 0,因此当我将它们添加到总数中时,我会得到正确的总数并且没有错误。
任何帮助表示赞赏。
使用$ifNull聚合运算符。如果该字段不存在,它将用空白数组替换该字段。
[
{ '$match': { 'type': 'big_spender' }},
{ '$project': {
'name': '$name',
'cars': { '$size': '$cars' },
'boats': { '$size': { '$ifNull': ['$boats', []] }},
'planes': { '$size': { '$ifNull': ['$planes', []] }}
}},
{ '$addFields': {
'total_vehicles': {
'$add': [
'$cars', '$boats', '$planes'
]
}
}}
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1405 次 |
| 最近记录: |