我有一个大型数据集,其中包含在 Mongo 7.0 中运行的如下文档
{
"groupId": "12345",
"actionPerformed": "someAction",
"date": "2023-08-17T18:16:58.000Z" // stored as ISO Dates
}
我想按
groupId
对它们进行分组并获取最近执行的操作。
我在 $sort
字段上聚合到 date
然后在小组赛中使用 $first 更有效,还是在小组赛中使用 $top 操作为我进行排序更有效?我的索引正确涵盖了两者,我只是找不到有关此主题的优化的任何文档。
1)。 $sort + $group 和 $first .
此方法涉及根据日期字段按降序对文档进行排序,然后使用 $group 和 $first 来获取每个 groupId 的最新操作。
db.coll.aggregate([
{
$sort: { date: -1 } // Sort by date in descending order
},
{
$group: {
_id: "$groupId",
mostRecentAction: { $first: "$actionPerformed" },
mostRecentDate: { $first: "$date" }
}
}
]);
这种方法应该有效并产生预期的结果。效率可能取决于数据集大小、数据分布以及 MongoDB 实例的具体特征等因素