尝试以下聚合管道,它应该会给你两个查询的结果:
db.collection('population').aggregate([
{
"$unwind": "$population"
},
{
"$group": {
"_id": 0,
"doc": {
"$push": "$$ROOT"
},
"average_age": {
"$avg": "$population.age"
},
"max_age": {
"$max": "$population.age"
},
"min_age": {
"$min": "$population.age"
},
"average_population": {
"$avg": "$population.count"
},
"max_population": {
"$max": "$population.count"
},
"min_population": {
"$min": "$population.count"
}
}
},
{
"$unwind": "$doc"
},
{
"$group": {
"_id": "$doc.population.age",
"sum": { "$sum": "$doc.population.count" },
"average_age": { "$first": "$average_age"},
"max_age": { "$first": "$max_age"},
"min_age": { "$first": "$min_age"},
"average_population": { "$first": "$average_population"},
"max_population": { "$first": "$max_population"},
"min_population": { "$first": "$min_population"}
}
}
])
max_population
不是每个文档中的最大年龄,而是每个文档中population.counts
的总和,这样我就可以显示在哪个时间戳/文档中注册了最多的人数。无论如何,再次感谢!!! - Migueldb.collection('population').aggregate([{ "$unwind": "$population" }]);
,检查结果以查看是否正确解构population
数组,添加下一个管道阶段,运行并重复这些步骤,直到到达最终管道阶段。我使用 Robomongo 0.8.4 进行此操作。一旦您获得了工作的聚合管道,就可以将代码部署到生产环境中。 - chridam