如何按照特定标准对已经使用mongodb排序的前X个文档进行排序?

时间:2015-11-20 09:50:15

标签: mongodb sorting mongodb-query aggregation-framework

对我来说,提出这个问题有点困难。问题是,我需要获得100个评分最高的文档,然后按照其他标准对结果进行排序。

我是mongodb的初学者,我天真地尝试过:

db.myCollection
  .find()                                 // get all the data
  .sort({ "statistics.average": -1 })     // sort by rating
  .limit(100)                             // get the 100 best rated
  .sort({ "statistics.foobar": -1 })      // sort the result by the second criteria

但它不起作用,看起来对所有数据进行了最后一次排序。

如何正确创建符合我需求的查询?

2 个答案:

答案 0 :(得分:1)

Mongo在限制结果之前应用排序,无论您调用排序和限制光标的顺序如何,但使用.aggregate()方法将得到预期的结果。

db.mycollection.aggregate([
    { "$sort": { "statistics.average": -1 } },
    { "$limit": 100 }, 
    { "$sort": { "statistics.foobar": -1 } }
]) 

答案 1 :(得分:0)

db.myCollection
  .find()                                 // get all the data
  .sort({ "statistics.average": -1 ,"statistics.foobar": -1 })     // sort by rating followed by foobar
  .limit(100) // get the 100 best rated