基于条件的MongoDB按计数分组
我有以下mongo DB模式:基于条件的MongoDB按计数分组,mongodb,mongoose,nosql,mongodb-query,nosql-aggregation,Mongodb,Mongoose,Nosql,Mongodb Query,Nosql Aggregation,我有以下mongo DB模式: { "_id" : "5b76c3c037548390fdb5b40e", "userId" : "4601", "modified" : ISODate("2018-08-21T19:13:43.301+05:30"), "rStatus" : "started", }, { "_id" : "5b76c3c037548390fdb5b40e", "userId" : "13", "modified" :
{
"_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"]]]}}
}}])
您可以在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"]]]}}
}}])
这可能是答案
db.collection.aggregate([{“$group”:{“\u id”:{“$dateToString”:{“date”:“$modified”,“format”:“%Y-%m-%d”},“completed”:{“$sum”:{“$cond”:[{“$eq”:[“$rStatus”,“completed”]},1,0]}}])
@AnthonyWinzlet,谢谢,它的工作原理可能就是答案db.collection.aggregate([{“$group:{”{U id:{“$dateToString:{”date:“$modified”,“format:“%Y-%m-%d”}”,completed:{“$sum:{”$cond:[{”$eq:[“$rStatus”,“completed”]},1,0]}}}])
@AnthonyWinzlet,谢谢,它的工作