在MongoDB中,可以使用聚合框架中的$group和$sort操作符来按值对文档进行分组,并使用$last操作符返回每个组中的最新文档。以下是一个示例代码,展示了如何实现这个需求:
db.collection.aggregate([
{ $sort: { value: 1, timestamp: -1 } }, // 按值升序排序,时间戳降序排序
{
$group: {
_id: "$value", // 根据值进行分组
newestDocument: { $first: "$$ROOT" } // 取每个组中的第一个文档(即最新的文档)
}
},
{ $replaceRoot: { newRoot: "$newestDocument" } } // 将最新的文档作为根文档返回
])
请注意,上述代码中的collection
应替换为实际集合的名称,value
应替换为用于分组的字段名称,timestamp
应替换为用于排序的时间戳字段名称。
此代码将首先按值升序和时间戳降序对文档进行排序。然后,使用$group
操作符按值将文档分组,使用$first
操作符选择每个组中的第一个文档,即最新的文档。最后,使用$replaceRoot
操作符将最新的文档作为根文档返回。
请注意,此解决方案假设时间戳字段(timestamp
)存储为日期类型或以其他适当的方式进行比较。如果时间戳存储为字符串类型,请确保按适当的格式进行排序。