如何解决在N个先前的结果上具有$ group和$ limit的聚合管道?
我想运行一个查询,该查询仅按日期将最新的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" },}
}
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。