Mongodb 对不同集合元素中的唯一属性求和
我对MongoDB很陌生。希望我用正确的术语来表达我的问题 我有以下收藏:Mongodb 对不同集合元素中的唯一属性求和,mongodb,mongodb-query,Mongodb,Mongodb Query,我对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",
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进行匹配,如果匹配,则计算成本总和
我希望我已经正确地解释了我的问题。感谢您的帮助。谢谢尝试此聚合查询:
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" }
假设这是真的。据我所知,您想按资源id对文档进行分组,其中卷id=资源id,对于每个组的总成本?@ari是否会有另一个文档,卷id等于
I-1234
?我的意思是,如果一个文档具有volumeId
,那么另一个文档是否可能将第一个文档的resourceId
作为其volumeId?
@AntonPutau,是的。我想按resourceId
对volumeId
=resourceId
中的文档进行分组。请注意,存在多个资源ID:“i-1234”
@n9code不会有另一个volumeId
等于i-1234
的文档,也不会有与resourceId
的任何关联。那么,这句话是真的吗?如果一个文档的volumeId
非空,那么就不存在其他文档的volumeId
值为第一个文档的resourceId
?检查我的答案,看看它是否有效。这绝对是一个很大的帮助!非常感谢。但是,如果我想例如输出{“cost”:2,“resourceid”:“I-1234”}
而不是v-1234
签出更新,我不确定如何修改此选项。有点黑,但在你的条件下工作。