node.js - 如何在nodeJS和mongoDB中进行聚合

标签 node.js mongodb aggregation-framework aggregation

这是我的数据:

{"data":[{"_id":"5be83f29bea83328bca27008","purpose":"charges","amount":{"rupis":"59+5+10+60+43","total":177},"date":"2018-11-11"},
{"_id":"5be843a89043152bb453b1b4","purpose":"books","amount":{"rupis":"500+600+10+300","total":1410},"date":"2018-11-11"},
{"_id":"5bf3b30a395be7142ce5cf01","purpose":"tiffin","amount":{"rupis":"20","total":20},"date":"2018-11-15"},
{"_id":"5bf3b318395be7142ce5cf02","purpose":"movie","amount":{"rupis":"200","total":200},"date":"2018-11-10"},
{"_id":"5bf3b342395be7142ce5cf03","purpose":"snacks","amount":{"rupis":"60","total":60},"date":"2018-11-20"},
{"_id":"5bf624d135cc0832ac31e6d7","purpose":"tiffin","amount":{"rupis":"20+20","total":40},"date":"2018-11-22"},
{"_id":"5bf6258c665d9a47c88437f3","purpose":"charges","amount":{"rupis":"20","total":20},"date":"2018-11-22"},
{"_id":"5c00dd328c053104a0e0eb91","purpose":"charges","amount":{"rupis":"43","total":43},"date":"2018-11-30"},
{"_id":"5c04fd3e4b08fd12f06c98ec","purpose":"charges","amount":{"rupis":"59+5","total":64},"date":"2018-12-03"},
{"_id":"5c10e844ff1a6f06fc28e627","purpose":"shopping","amount":{"rupis":"30","total":30},"date":"2018-11-11"},
{"_id":"5c10e858ff1a6f06fc28e628","purpose":"soap","amount":{"rupis":"40+40","total":80},"date":"2018-11-11"}]}

这就是我想要的输出:

{
  "charges" : 197,
  "books" : 1410,
  "tiffin" : 60,
  "snacks" : 60,
  "shopping" : 30,
  "soap" : 80
}

我尝试了以下方法,但它抛出错误,

db.Expense.aggregate([ 
    { $match: {  
        date: {  
            $gte: "2018-11-11", 
            $lte: "2018-11-23" 
        } 
    } }, 
    { $group: { 
        purpose: "$purpose", 
        total: { $sum: "$amount.total" } 
    } } 
]);

最佳答案

您的组管道需要一个_id键进行分组,请将您的$group管道步骤重写为

{ $group: { 
    _id: "$purpose", 
    total: { $sum: "$amount.total" } 
} } 

{ $group: { 
    _id: { purpose: "$purpose" }, 
    total: { $sum: "$amount.total" } 
} } 

关于node.js - 如何在nodeJS和mongoDB中进行聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53743117/

相关文章:

MongoDB Tree Model : Get all ancestors, 获取所有后代

javascript - 如何在 Node.js 中检测多个数组的多个异步调用何时完成

javascript - 如何使用node js mongoose保存后返回json数据

node.js - 如何从 Node.js 访问 shell 变量值?

javascript - 如何使用twilio客户端在reactjs中发送电话验证码?

Mongodb - 从嵌套项目中获得最高结果

node.js - Mongoskin不会从nodejs应用程序中的mongodb获取一些结果

mongodb - Heroku + Node.js + MongoHQ + Expressjs

mongodb - 聚合框架 - 将 Unix 时间戳转换为 ISODate

mongodb - 仅检索 MongoDB 集合中对象数组中的查询元素