我遇到了聚合问题,因为我需要更新对象数组中的分析值.
我有一个聚合,它生成如下对象:
{
"key": "product1",
"analytics": [
{
"type": "CLICK",
"value": 2
},
{
"type": "SELL",
"value": 19.99
}
]
}
管道末端:
{
$merge: {
into: 'analytics',
on: ['key'],
whenMatched: [ // <- MIGHT BE HERE SOME PREP CODE USING $$new
{
$replaceWith: {
key: '$key',
analytics: {} // <- OR HERE?
}
}
],
whenNotMatched: 'insert'
}
}
因此,问题是这条管道每小时运行一次,收集所有新数据用于分析.按whenNotMatched
条件添加新记录时运行正常.但我需要更新每个"类型"的"值"(用新值汇总旧值),如果它们不在analytics
数组中,则添加新的"类型".
例如:
我们有了这个物体:
{
"key": "product1",
"analytics": [
{
"type": "CLICK",
"value": 2
},
{
"type": "SELL",
"value": 19.99
}
]
}
在另一条管道运行后,我们有了:
{
"key": "product1",
"analytics": [
{
"type": "CLICK",
"value": 5
},
{
"type": "SELL",
"value": 29.99
},
{
"type": "ABANDON",
"value": 1
}
]
}
合并后,我们应该有:
{
"key": "product1",
"analytics": [
{
"type": "CLICK",
"value": 7
},
{
"type": "SELL",
"value": 49.98
},
{
"type": "ABANDON",
"value": 1
}
]
}