2013-07-07 44 views
28

Tôi muốn chọn các tài liệu gần đây nhất từ ​​một bộ sưu tập. Câu trả lời từ câu hỏi này mongodb: how to get the last N records? cho thấy rằng thứ tự các hoạt động trong truy vấn quan trọng. Tuy nhiên điều này dường như không phải là trường hợp (có lẽ kể từ khi Mongo 2.4 được phát hành). Tôi đã thử cả hai truy vấn sau và nó xuất hiện rằng Mongo đầu tiên áp dụng giới hạn và sau đó thực hiện sắp xếp.Làm cách nào để yêu cầu Mongo sắp xếp một bộ sưu tập trước khi giới hạn kết quả?

Query 1

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

Query 2

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

Điều gì sẽ là truy vấn chính xác để nói với Mongo để sắp xếp đầu tiên và hạn chế thứ hai?

EDIT --- Dưới đây là một tài liệu mẫu từ bộ sưu tập

{ 
    _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" 
} 

Trả lời

46

Vấn đề là bạn cần phải sắp xếp trên date thay vì $date.

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

Mongo áp dụng các loại trước khi hạn chế các kết quả không phụ thuộc vào thứ tự bạn gọi sortlimit trên con trỏ.

Bằng chứng trong tài liệu: link

Các vấn đề liên quan