【问题标题】:Mongo aggregate query $sort before $group taking a lot of timeMongo 聚合查询 $sort 在 $group 之前花费了很多时间
【发布时间】:2015-11-28 09:35:27
【问题描述】:

我需要一些按时间排序并按电话号码分组的用户数据。 使用 $match,然后是 $sort,然后是 $group。 该查询在 mongo 上讨论了很多时间。 如果我删除任何一个 $sort 或 $group 条件,查询将在毫秒内执行。

我使用的查询是

db.buyerResponse.aggregate([
    { $match: { superProfileId: 321956, responseDate: { $gte: new Date(1432739021103), $lt: new Date(1448636621103) } } }, 
    { $sort: { responseDate: -1 } },
    { $group: { _id: "$phone", responseId: { $first: "$_id" } }}, { $skip: 0 }, 
    { $limit: 50 }
])

【问题讨论】:

  • 1500万个文档的集合需要11秒。如果我去除污渍,它也会在大约 100 毫秒内给出结果。上面查询的所有字段也都被索引了。
  • 展示给我们看!您可能对一个或多个索引有问题(以防您在交叉路口下注)。
  • 先排序再匹配需要多少时间?
  • @MarkusWMahlberg superProfileId、responseDate 和 phone 都被索引了
  • @Amar 显示我们。单个还是多个?命令?只需显示我们。

标签: mongodb aggregation-framework


【解决方案1】:

您应该在排序之前进行分组。分组后,要排序的记录要少得多。通常,您几乎总是希望最后排序。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 2016-04-05
  • 2017-05-10
  • 2015-08-02
相关资源
最近更新 更多