mongodb - 字段上的 mongo 聚合总和,而字段的值应根据另一个字段映射到 +/-

标签 mongodb pymongo mongo-shell

我有以下collectionmongodb ,

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字段 Pmemo表示正值,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"}}});

但不知道如何取PN在这里考虑一下。

最佳答案

使用$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/

相关文章:

python - 在PyMongo中,MongoClient的maxPoolSize=100的默认值没有效果?

python - 我如何在 pymongo 中填充?

MongoDb:如何使用身份验证使用 shell 删除数据库?

MongoDB toLowerCase()

Ubuntu : no valid seed servers in list 上的 Node.js MongoDB

python - 使用 Python 从 AWS Lambda 连接到 DocumentDB

node.js - mongoose 查询在 Node.js 中不起作用,但在 mongo shell 中起作用

node.js - postman 发布请求无法读取未定义的属性

mongodb - 我可以将 MongoDB 配置为内存中吗?

java - mongodb geoSpatial 查询不起作用