我很好奇我控制聚合查询结果格式的选项。
以下是我正在谈论的结果集:
我希望month
和year
与average
和count
处于同一级别。我也希望_id
能够离开。
这可能吗?
如果没有,我可以对数据进行后期处理,但我想确保首先没有遗漏任何内容。
[
{
"result" : [
{
"_id" : {
"month" : 10,
"year" : 2014
},
"average" : 84.2586640583996598,
"count" : 20959.0000000000000000
},
{
"_id" : {
"month" : 11,
"year" : 2014
},
"average" : 96.9326915103888638,
"count" : 20743.0000000000000000
}
],
"ok" : 1.0000000000000000
}
]
...这里是生成这些结果的查询:
db.mycollection.aggregate(
[
{
$match: {
mydate: {
$gte: new Date(Date.UTC(2014, 10, 1)),
$lt: new Date(Date.UTC(2014, 12, 1)),
}
}
},
{
$group : {
_id : { month: { $month: "$mydate" }, year: { $year: "$mydate" } },
average: { $avg: "$mynumericfield" },
count: { $sum: 1 }
}
}
]
)
答案 0 :(得分:3)
您应该能够在$project
操作中重命名字段,并且还可以从$project
内的输出中删除字段。
(不知道格式是否正确,只是为了显示方式):
db.mycollection.aggregate(
[
{
$match: {
mydate: {
$gte: new Date(Date.UTC(2014, 10, 1)),
$lt: new Date(Date.UTC(2014, 12, 1)),
}
}
},
{
$group : {
_id : { month: { $month: "$mydate" }, year: { $year: "$mydate" } },
average: { $avg: "$mynumericfield" },
count: { $sum: 1 }
}
},
{
$project : {
_id : 0,
month : "$_id.month",
year : "$_id.year",
average : 1,
count : 1
}
}
]
)