在$ group占用大量时间之前,Mongo聚合查询$ sort

时间:2015-11-28 09:35:28

标签: mongodb aggregation-framework

我需要为按时间排序的用户提供一些数据,并按电话号码分组。 使用$ 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 }
])

1 个答案:

答案 0 :(得分:2)

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