mongodb - MongoDB 根据条件按计数分组
问题描述
我有以下 mongo DB 架构:
{
"_id" : "5b76c3c037548390fdb5b40e",
"userId" : "4601",
"modified" : ISODate("2018-08-21T19:13:43.301+05:30"),
"rStatus" : "started",
},
{
"_id" : "5b76c3c037548390fdb5b40e",
"userId" : "13",
"modified" : ISODate("2018-08-21T19:13:43.301+05:30"),
"rStatus" : "completed",
},
........
需要通过 rStatus 字段的修改日期和计数来获取数据组,例如
{
modified:"2018-08-21",
count :{"completed":1,"ongoing":4}
},
{
modified:"2018-07-23",
count :{"completed":2,"ongoing":5}
},
我正在使用 $group 但它的计数仅按修改日期而不是按内部键的值。
解决方案
您可以在 3.6 中使用以下聚合。
db.colname.aggregate([
{"$group":{
"_id":{
"date":{"$dateToString":{"date":"$modified","format":"%Y-%m-%d"}},
"rstatus":"$rStatus"
},
"count":{"$sum":1}
}},
{"$group":{
"_id":"$_id.date",
"count":{"$mergeObjects":{"$arrayToObject":[[["$_id.rstatus","$count"]]]}}
}}])
推荐阅读
- javascript - 为什么我不能以这种方式在泛型中声明方法?
- javascript - Google 选择器 API 不再允许登录
- django - 如何为 Django 应用程序实现 CI/CD 管道
- android - 为什么用于选择 Spinner 下拉项的录制的 espresso 测试代码会在不同的 Android 版本上产生不同的、不兼容的代码?
- python - POST 数据应该是字节、字节的可迭代对象或文件对象。它不能是 str 类型
- python - .format() 和列表索引方法
- apache-spark - 为什么我得到 CSVHeaderChecker:69 - CSV 标头不符合架构。?
- javascript - 拼接后如何将删除的项目存储到新数组中?
- python - 如何仅通过域名从服务器获取确切时间?
- java - 在活动类之外启动活动