Mongodb 同一查询中的多个聚合

Mongodb 同一查询中的多个聚合,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有一个问题,我不知道如何用MongoDB语法解决它。 事实上,这是我的实际查询: db.traitement".aggregate {$match: {timestampentre: {$gt: start}, timestampentre: {$lt: end}}}, {$project: {year: {$year: "$date_entre"}, month: {$month: "$date_entre"}, "carnetsanitairedone.isDoneDouche": "$c

我有一个问题,我不知道如何用MongoDB语法解决它。 事实上,这是我的实际查询:

db.traitement".aggregate {$match: {timestampentre: {$gt: start}, timestampentre: {$lt: end}}}, {$project: {year: {$year: "$date_entre"}, month: {$month: "$date_entre"}, "carnetsanitairedone.isDoneDouche": "$carnetsanitairedone.isDoneDouche", "carnetsanitairedone.isDoneDetartrage": "$carnetsanitairedone.isDoneDetartrage"}}, {$group: {_id: {year: "$year", month: "$month", "carnetsanitairedone.isDoneDouche": "$carnetsanitairedone.isDoneDouche", "carnetsanitairedone.isDoneDetartrage": "$carnetsanitairedone.isDoneDetartrage"}, count: {$sum: 1}}}
将返回此结果集:

[ { _id:
     { year: 2014,
       month: 10,
       'carnetsanitairedone.isDoneDouche': false,
       'carnetsanitairedone.isDoneDetartrage': false },
    count: 1 },
  { _id:
     { year: 2014,
       month: 10,
       'carnetsanitairedone.isDoneDouche': true,
       'carnetsanitairedone.isDoneDetartrage': true },
    count: 1 },
  { _id:
     { year: 1970,
       month: 1,
       'carnetsanitairedone.isDoneDouche': false,
       'carnetsanitairedone.isDoneDetartrage': false },
    count: 1 },
  { _id:
     { year: 1970,
       month: 1,
       'carnetsanitairedone.isDoneDouche': true,
       'carnetsanitairedone.isDoneDetartrage': true },
    count: 2 } ]
    'year': 2014,
    'month': 10,
    'count.isDoneDouche': 10,
    'count.isNotDoneDouche': 20,
    'count.isDoneDetartrage': 30,
    'count.isNotDoneDetartrage': 13
我真正需要的对应于以下结果集:

[ { _id:
     { year: 2014,
       month: 10,
       'carnetsanitairedone.isDoneDouche': false,
       'carnetsanitairedone.isDoneDetartrage': false },
    count: 1 },
  { _id:
     { year: 2014,
       month: 10,
       'carnetsanitairedone.isDoneDouche': true,
       'carnetsanitairedone.isDoneDetartrage': true },
    count: 1 },
  { _id:
     { year: 1970,
       month: 1,
       'carnetsanitairedone.isDoneDouche': false,
       'carnetsanitairedone.isDoneDetartrage': false },
    count: 1 },
  { _id:
     { year: 1970,
       month: 1,
       'carnetsanitairedone.isDoneDouche': true,
       'carnetsanitairedone.isDoneDetartrage': true },
    count: 2 } ]
    'year': 2014,
    'month': 10,
    'count.isDoneDouche': 10,
    'count.isNotDoneDouche': 20,
    'count.isDoneDetartrage': 30,
    'count.isNotDoneDetartrage': 13
你能帮我解决这个问题吗

感谢advance

您可以有条件地使用操作员为您作为
\u id
值提供的任何键设置项目:

db.traitement.aggregate([
{“$match”:{
“时间中心”:{“$gt”:开始,$lt:结束}
}}, 
{“$组”:{
“_id”:{
“年”:{“$year”:“$date_entre”},
“月”:{“$month”:“$date_entre”}
},
“countIsDoneDouche”:{
“$sum”:{
“$cond”:[
“$carnetsanitairedone.isDoneDouche”,
1.
0
]
}
},
“countIsNotDoneDouche”:{
“$sum”:{
“$cond”:[
{“$ne”:[“$carnetsanitairedone.isDoneDouche”,true]},
1.
0
]
}
},
“CountisDoneDetarrage”:{
“$sum”:{
“$cond”:[
“$carnetsanitairedone.isdonedartrage”,
1.
0
]
}
},
“countisnotdonedatarrage”:{
“$sum”:{
“$cond”:[
{“$ne”:[“$carnetsanitairedone.isdonedartrage”,真]}
1.
0
]
}
}
}}
])

这允许在每个
$cond
操作中提供的“三元”条件确定“计数器”是否为当前值递增。

I这是否真的按日期分组?我的数据库中有5行,但在执行此请求时,我现在有10个结果:o,每年5行(我有2014年和1970年)@Skahrz在没有看到您的数据的情况下无法判断。1970年的数据表明你的数据有问题。坦率地说,我有点困惑,为什么要在一个日期字段上匹配,在另一个日期字段上分组。