Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MongoDB聚合返回数字字段上具有最大值的文档_Mongodb_Mongoose_Aggregation Framework - Fatal编程技术网

使用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,您会建议如何做?