在限制结果之前,您如何告诉Mongo对集合进行排序?

时间:2013-07-07 03:31:40

标签: mongodb

我想从集合中选择最新的文档。这个问题mongodb: how to get the last N records?的答案表明查询中的操作顺序很重要。然而,情况似乎并非如此(也许自Mongo 2.4发布以来)。我已经尝试了以下两个查询,看起来Mongo首先应用限制然后执行排序。

查询1

myCollection.find().sort( { '$date': 1 }).limit(50, callback);

查询2

myCollection.find().limit(50).sort( { '$date': 1 }, callback);

告诉mongo先排序并限制第二个是正确的查询是什么?

编辑---这是来自集合

的示例文档
{
  _id: ObjectId("517eb0dddbab79c74700005d"),
  audioFiles: [
    {
      audioFileName: "C64FEFA8-DD43-40A1-8996-35948F3438BF-6896-0000027BD4A59D91",
      audioLanguage: "English",
      date: ISODate("2013-05-21T16:23:04.006Z"),
      flag: "1",
      user: "36C4DEB6-C13D-4211-94B5-CC4DD993ECF1-6896-00000278FA7B08EC"
    },
    {
      audioFileName: "994B6DF6-73B5-458F-912A-FF67A84534B2-23532-0000020000000000",
      audioLanguage: "English",
      date: ISODate("2013-05-27T10:45:04.107Z"),
      flag: "1",
      user: "9D7BB3F4-371B-4F2A-8DA2-0C4CE8B4E16D-974-0000000000000000"
    }
  ],
  date: ISODate("2013-04-29T17:41:49.101Z"),
  imageFileName: "SteamLokomotive0498",
  random: 0.6750695831142366,
  thumbFileName: "SteamLokomotive0498_150x150",
  user: "62923D8E-00CE-4F0C-AECA-3010D78FC9CE-226-0000000000000000",
  userLanguagePref: "Cantonese"
}

2 个答案:

答案 0 :(得分:57)

问题是您需要对date而不是$date进行排序。

myCollection.find().sort({date: 1}).limit(50, callback);

Mongo在限制结果之前应用排序,无论您在光标上调用sortlimit的顺序如何。

文档证明:link

答案 1 :(得分:0)

我在使用limit时遇到麻烦,不得不先删除$:

MyCollection.find({ "exampleQuery._id": "exampleId123xx }, { $sort: { requestDate: -1 }, limit: 3 });