使用MongoDB聚合返回数字字段上具有最大值的文档
例如,如果我有一堆文件使用MongoDB聚合返回数字字段上具有最大值的文档,mongodb,mongoose,aggregation-framework,Mongodb,Mongoose,Aggregation Framework,例如,如果我有一堆文件 { _id: mongoId, subcatId: mongoId, viewCount: 2 } \u id是唯一的,但subcatId不是唯一的 如果我想返回每个subcatId中具有最高视图数的每个文档,我将如何使用Mongoose/MongoDB聚合来返回这些文档?您可以这样做: db.test.aggregate([ //按viewCount降序对文档进行排序,以使最高的文档排在第一位 {$sort:{viewCount:-1}}, //按子类别分
{
_id: mongoId,
subcatId: mongoId,
viewCount: 2
}
\u id
是唯一的,但subcatId
不是唯一的
如果我想返回每个subcatId中具有最高视图数的每个文档,我将如何使用Mongoose/MongoDB聚合来返回这些文档?您可以这样做:
db.test.aggregate([
//按viewCount降序对文档进行排序,以使最高的文档排在第一位
{$sort:{viewCount:-1}},
//按子类别分组,并从每组中取出第一张单据
{$group:{{u id:'$subcatId',doc:{$first:'$$ROOT'}}
])
系统变量是在2.6中添加的,表示管道中该阶段正在处理的整个文档。所有系统变量都使用$$
前缀引用
对于较早版本的MongoDB,您需要单独将所需的每个字段添加到$group
:
db.test.aggregate([
{$sort:{viewCount:-1}},
{$group:{
_id:“$subcatId”,
doc_id:{$first:'$_id'},
viewCount:{$first:'$viewCount'}
}}
])
什么是“$$ROOT”我很难找到与该术语相关的文档。我未捕获到此错误异常:聚合失败:{“errmsg”:“异常:字段路径字段名不能以“$”开头”,“代码”:16410,“确定”:0}此外,您可能还希望包括:旁边$group@AustinDavis$$ROOT
是在MongoDB 2.6中添加的,因此如果您运行的是较旧的版本,则必须将每个字段分别包含在$group
中。是的,我使用的是2.4.11:(因此,如果我还想在返回中包含文档id和viewCount,您会建议如何做?