我有以下collection
在mongodb
,
doc_id amount memo
1 1.0 P
1 2.0 N
2 3.0 P
2 4.0 P
2 5.0 N
我想要sum
amount
字段 P
在memo
表示正值,N
表示 amount
的值为负值;所以当我 group
doc_id
并执行 sum
,我会得到-1.0
对于 doc_id
1
,和2.0
对于 doc_id
2
。我知道如何按 doc_id
分组然后sum
,
db.collection.aggregate({ $group: { _id : 'doc_id', sum: { $sum: "$amount"}}});
但不知道如何取P
和N
在这里考虑一下。
最佳答案
使用$cond根据备忘录将值投影为负/正,然后将金额相加。 以下用 pymongo 编写的查询将适合您。
db.collection..aggregate([{'$project':
{'amount': {'$cond': { 'if': { '$eq':['$memo','P'] }, 'then': '$amount',
'else': {'$multiply':['$amount',-1]} }},
'doc_id': '$doc_id'}},
{'$group': {'_id': '$doc_id','sum':{'$sum': '$amount'}}}])
关于mongodb - 字段上的 mongo 聚合总和,而字段的值应根据另一个字段映射到 +/-,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47513062/