我想从集合中选择最新的文档.mongodb这个问题的答案:如何获得最后的N条记录?表明查询中的操作顺序很重要.然而,情况似乎并非如此(也许自Mongo 2.4发布以来).我已经尝试了以下两个查询,看起来Mongo首先应用限制然后执行排序.
查询1
myCollection.find().sort( { '$date': 1 }).limit(50, callback);
Run Code Online (Sandbox Code Playgroud)
查询2
myCollection.find().limit(50).sort( { '$date': 1 }, callback);
Run Code Online (Sandbox Code Playgroud)
什么是正确的查询告诉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"
}
Run Code Online (Sandbox Code Playgroud)
Joh*_*yHK 62
问题是你需要排序date而不是$date.
myCollection.find().sort({date: 1}).limit(50, callback);
Run Code Online (Sandbox Code Playgroud)
无论您调用的顺序sort和limit光标如何,Mongo都会在限制结果之前应用排序.
docs中的证明:链接
| 归档时间: |
|
| 查看次数: |
54255 次 |
| 最近记录: |