查找mongodb集合中某个字段最新且另一个字段不同的所有文档

查找mongodb集合中某个字段最新且另一个字段不同的所有文档,mongodb,mongoose,Mongodb,Mongoose,我想将整个文档提取到组中 例如,我有一个名为“sub_comment”的集合 每个“sub_comment”都有一个对其中一个“comment”的引用作为“commentId” sub_comment=新模式({//根据mongoose模式 更新日期:日期, 文本:字符串, 作者:String, 信息:字符串, commentId:{type:ObjectId,ref:'comment'} }) 现在,我想提取所有那些最新的子元素(完整文档)(通过“updatedAt”)并按每个注释分组 我目

我想将整个文档提取到组中

例如,我有一个名为“sub_comment”的集合

每个“sub_comment”都有一个对其中一个“comment”的引用作为“commentId”

sub_comment=新模式({//根据mongoose模式
更新日期:日期,
文本:字符串,
作者:String,
信息:字符串,
commentId:{type:ObjectId,ref:'comment'}
})
现在,我想提取所有那些最新的子元素(完整文档)(通过“updatedAt”)并按每个注释分组

我目前正在这样做:

mongoose.model('sub_comment')。聚合([
{$sort:{commentId:1,updatedAt:-1}},
{$group:{{U id:$commentId',updatedAt:{$first:$updatedAt}}
]
当然,这只返回两个字段,即
updatedAt
commentId

现在,如果我想要整个文档,我将不得不分别编写每个字段,这是我不想做的

首选的方法应该是什么

编辑:简单查询

收藏=

[
{commentId:1,更新日期:ISO(“2015-10-13T11:38:29.000Z”),xyz:'xyz1'},
{commentId:2,更新日期:ISO(“2015-10-10T11:38:29.000Z”),xyz:'xyz2'},
{commentId:2,更新日期:ISO(“2015-10-14T11:38:29.000Z”),xyz:'xyz3'},
{commentId:1,更新日期:ISO(“2015-10-11T11:38:29.000Z”),xyz:'xyz4'}
]
我想要输出:

[
{commentId:1,更新日期:ISO(“2015-10-13T11:38:29.000Z”),'xyz':'xyz1'},
{commentId:2,更新日期:ISO(“2015-10-14T11:38:29.000Z”),'xyz':'xyz3'}
]
您可以在聚合中使用系统变量来引用管道中该阶段的完整顶级文档:

mongoose.model('sub_comment')。聚合([
{$sort:{commentId:1,updatedAt:-1}},
{$group:{{U id:$commentId],文档:{$first:$$ROOT}}
]

MongoError:exception:FieldPath字段名不能以“$”开头
$$ROOT
是在MongoDB 2.6中添加的,因此请确保您的服务器是该版本或更高版本。好的,我的版本是2.4.5,但在迁移mongo之后,您确定我不会出现这种错误:[MongoError:例外:必须将组聚合字段“doc”定义为对象内的表达式]????