2015-08-08 80 views
2

我處於mongodb的學習階段。從集合中獲取第n個項目

我有一個測試網站項目,其中一個故事的每一步都是domain.com/step 例如,第14步是通過domain.com/14

換句話說訪問,對於上述情況,我需要訪問我的收藏中的第14個文檔才能使用它。

我一直在使用find().skip(n).limit(1)這個方法來返回n th文件,但是當文件太多時,它會變得非常慢。所以我需要一種更有效的方式來獲取我的收藏中的文檔n

任何想法表示讚賞。

+0

遠程分頁通常是這種情況,來自Google的一些示例http://stackoverflow.com/questions/7228169/slow-pagination-over-tons-of-records-in-mongo http://stackoverflow.com/問題/ 9703319/mongodb-ranged-pagination http://blog.mongodirector.com/fast-paging-with-mongodb/ – Sammaye

+0

投票下來,沒有任何評論 - 非常有建設性的舉措。 – Mia

+0

@Sammaye謝謝你的鏈接,但是我看到他們,他們不是我的問題的答案。我不在尋找分頁,我需要直接訪問domain.com/step鏈接 - 第二和第三個鏈接完全是關於skip的分頁,第一個鏈接沒有答案,但是一個建議:「不要使用它」 所有這些實際上是我的問題在這裏的原因。 – Mia

回答

1

在您的文檔中添加一個字段,告訴您它是哪一步,向該字段添加索引並按該字段進行查詢。

文件:

{ 
    step:14 
    text:"text", 
    date:date, 
    imageurl:"imageurl" 
} 

指數:

db.collection.createIndex({step:1}); 

查詢:

db.collection.find({step:14}); 

集合中的自然順序爲依託的不僅僅是慢(如你發現了),它也是不可靠的。當你開始一個新的集合並插入一堆文檔時,通常會按照插入它們的順序找到它們。但是,當您在插入文檔後更改文檔時,可能會發生訂單以不可預知的方式混亂。所以永遠不要依賴插入順序一致。

例外:Capped Collections保證廣告訂單保持一致。但是這些實用程序的使用情況非常少,我不認爲你在這裏有這種情況。