2013-07-07 11 views
28

Koleksiyondan en son belgeleri seçmek istiyorum. Bu sorudan yanıt mongodb: how to get the last N records?, sorgundaki işlem sırasının önemli olduğunu göstermektedir. Ancak durum böyle görünmemektedir (belki de Mongo 2.4 piyasaya sürüldüğünden beri). Aşağıdaki sorguların ikisini de denedim ve Mongo'nun önce limiti uyguladıktan sonra sıralama yapması gerekiyor.Mongo'ya sonuçları sınırlamadan önce bir koleksiyonu sıralamasını nasıl söylüyorsunuz?

Sorgu 1

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

Sorgu 2

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

Ne ilk sıralamak ve ikinci sınırlamak için mongo söylemek doğru sorguyu olurdu?

DÜZENLEME --- İşte koleksiyonu

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

cevap

46

sorun bir örnek belge date yerine $date üzerine sıralamak gerekir yani bu.

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

Mongo imlecin üzerinde sort ve limit diyoruz düzenin ne olursa olsun sonuç sınırlayıcı önce sıralama uygular.

Belgelerdeki kanıt: link

İlgili konular