我想从集合中选择最新的文档。这个问题的答案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 在限制结果之前应用排序,无论您在光标上调用 sort
和 limit
的顺序如何。
文档中的证明: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/