为 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'},
        ...
    }
})

。但是,我需要为文档中要拉取的每个字段添加一个表达式,这非常笨拙。是否有一个查询可以像上述查询一样计算高效(或更好)但更优雅地完成此操作?

您可以使用

$$ROOT$group中引用整个文档。

因此,要获取每个组的最新(即最后一个)文档,您可以执行以下操作:

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

最新更新