MongoDB 聚合 $group stage $top 与 $first 在大型数据集上的效率

问题描述 投票:0回答:1

我有一个大型数据集,其中包含在 Mongo 7.0 中运行的如下文档

{
 "groupId": "12345",
 "actionPerformed": "someAction",
 "date": "2023-08-17T18:16:58.000Z" // stored as ISO Dates
}

我想按

groupId
对它们进行分组并获取最近执行的操作。 我在
$sort
字段上聚合到
date
然后在小组赛中使用 $first 更有效,还是在小组赛中使用 $top 操作为我进行排序更有效?我的索引正确涵盖了两者,我只是找不到有关此主题的优化的任何文档。

mongodb aggregation-framework
1个回答
0
投票

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 实例的具体特征等因素

© www.soinside.com 2019 - 2024. All rights reserved.