例如,如果您有一个包含字段_id
、uuid
和timestamp
的数据集,并且数据包含数千个文档,分布在200个不同的uuid
中,并且您希望返回200个文档,每个uuid
一个,每个文档都是最新的(timestamp
递减等(,您将如何执行此操作?
我尝试了一些解决方案,并在StackOverflow中进行了搜索,但运气不佳。我相信有一些方法可以用聚合来做到这一点。
任何正确方向的提示或点头都将不胜感激。
感谢
事实证明,解决方案实际上非常简单。将不同字段用作$group
_id
,对于所需的值,请先对其进行排序,然后使用$last
选择最后一项。像这样:
db.example.aggregate([
{ $sort: { "timestamp": 1 } },
{ $group: { _id: "$uuid", timestamp: { $last: "$timestamp" } } }
])
如果你想要最新的,我想你可以失去
db.example.aggregate([
{ $group: { _id: "$uuid", timestamp: { $last: "$timestamp" } } }
])
好吧,这就解决了。