求和不同集合元素中的唯一属性
Sum unique properties in different collection elements
我对 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 相匹配,如果匹配则对成本求和。
希望我已经正确解释了我的问题。任何帮助表示赞赏。谢谢
试试这个聚合查询:
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" }
这是假设 为真。
我对 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 相匹配,如果匹配则对成本求和。
希望我已经正确解释了我的问题。任何帮助表示赞赏。谢谢
试试这个聚合查询:
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" }
这是假设