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

我想从集合中选择最新的文档。这个问题的答案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"
}

最佳答案

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

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

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

文档中的证明:link

db.bios.find().sort( { name: 1 } ).limit( 5 )
db.bios.find().limit( 5 ).sort( { name: 1 } )

The two statements are equivalent; i.e. the order in which you chain the limit() and the sort() methods is not significant. Both statements return the first five documents, as determined by the ascending sort order on ‘name’.

https://stackoverflow.com/questions/17509025/

相关文章:

shell - 为 MongoDB shell 设置默认数据库

node.js - MongoDB - 错误 : invalid schema, 预期 mongod

node.js - Mongoose - 验证电子邮件语法

node.js - Nodejs 中的 Mongodb 与 Postgres

javascript - 在 Node.js 中进行同步 MongoDB 查询的正确方法是什么?

mongodb - 聚合框架中的 $skip 和 $limit

mongodb - 在 Meteor 中运行示例的问题

javascript - Mongoose 保存与插入与创建

mongodb - 在 MongoDB 中执行搜索/投影时如何重命名字段?

mongodb - 如何在 MongoDB shell 中中止正在运行的查询?