为MongoDB聚合查询中的每个文档提取大量字段

时间:2015-01-08 01:21:21

标签: mongodb

我有一个MongoDB集合。其中,每个文档都有一个项目ID,一个时间字段和大量其他字段。重复项目ID。我想从每个不同的项ID中提取此集合中最后一个文档的所有数据。一种有效的方法如下:

db.items.aggregate({
    $sort: {time: -1}}, {
    $group: {
        _id: {item: '$item.id'},
        time: {$first: '$time'},
        anotherField: {$first: '$anotherField'},
        yetAnotherField: {$first: '$yetAnotherField'},
        ...
    }
})

...但是,我需要为我想要提取的文档中的每个字段添加一个表达式,这非常笨重。是否有一个查询可以像上面那样以高效(或更好)的方式实现这一目标,但更优雅?

1 个答案:

答案 0 :(得分:2)

您可以使用$$ROOT来引用$group中的整个文档。

因此,要获得每组的最新(即最后)文档,您可以这样做:

db.items.aggregate({
    $sort: {time: -1}}, {
    $group: {
        _id: {item: '$item.id'},
        lastDoc: {$first: '$$ROOT'}
    }
})