问题描述
我想运行一个查询,该查询仅按日期将最新的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" },}
}
])
但是,结果仍然是“未定义”。
谢谢您的任何建议。
解决方法
解决方案:
$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" },}
}
])