我想运行一个查询,该查询仅按日期将最新的N结果(例如10)分组。这意味着要进行滚动采样,每次查询发生时,它都会采样一些最后的答案。
这是我认为管道应该工作的方式:
Answer.aggregate([
{
$match: {
user_team_oid: team_oid
},
},
{
$sort: {
create_date: 1
}
},
{
$limit: 10
},
{
$group: {
"user_team_oid": "$team_oid",
"avg_a": { $avg: "$var_a" },
"avg_b": { $avg: "$var_b" },
"avg_c": { $avg: "$var_c" },
"avg_d": { $avg: "$var_d" },
"avg_e": { $avg: "$var_e" },
}
}
])
但是,结果仍然是“未定义”。
谢谢您的任何建议。
答案 0 :(得分:1)
解决方案:
$group
阶段需要一个"_id"
键。在这种情况下,将"_id"
误命名为"user_team_oid"
是个问题。 (请参见下面的工作代码)
好消息是该模式可以很好地工作,并允许在$group
阶段之前进行排序和过滤。
坏消息是该问题应该通过重新访问MongoDB Aggregation documentation来解决(感谢@Taplar的友好提醒)
工作代码:
Answer.aggregate([
{
$match: {
user_team_oid: team_oid
},
},
{
$sort: {
create_date: 1
}
},
{
$limit: 10
},
{
$group: {
"_id": "$team_oid",
"avg_a": { $avg: "$var_a" },
"avg_b": { $avg: "$var_b" },
"avg_c": { $avg: "$var_c" },
"avg_d": { $avg: "$var_d" },
"avg_e": { $avg: "$var_e" },
}
}
])