我是MongoDB的新手。希望我使用正确的术语来表达我的问题。
我有以下系列:
Data collection
{
"name":"ABC",
"resourceId":"i-1234",
"volumeId":"v-1234",
"data":"11/6/2013 12AM",
"cost": 0.5
},
{
"name":"ABC",
"resourceId":"v-1234",
"volumeId":"",
"data":"11/6/2013 2AM",
"cost": 1.5
}
我想查询集合,以便volumeId
与其他条目resourceId
匹配,然后一起总结相应的resourceId
费用。
因此,在这种情况下,费用为2.0
。
基本上我想将一个条目的volumeId与另一个条目的resourceId匹配,如果匹配则将成本相加。
我希望我已正确解释了我的问题。任何帮助表示赞赏。谢谢
答案 0 :(得分:1)
尝试此聚合查询:
db.col.aggregate([
{
$project: {
resourceId: 1,
volumeId: 1,
cost: 1,
match: {
$cond: [
{$eq: ["$volumeId", ""]},
"$resourceId",
"$volumeId"
]
}
}
},
{
$group: {
_id: '$match',
cost: {$sum: '$cost'},
resId: {
$addToSet: {
$cond: [
{$eq: ['$match', '$resourceId']},
null,
'$resourceId'
]
}
}
}
},
{$unwind: '$resId'},
{$match: {
resId: {
$ne: null
}
}
},
{
$project: {
resourseId: '$resId',
cost: 1,
_id: 0
}
}
])
您将获得以下内容:
{ "cost" : 2, "resourseId" : "i-1234" }