2012-04-04 85 views
0

什麼是批量查詢mongo集合的最有效方式?例如,在SQL我會做這樣的事情:批量查詢的等價Mongodb成語

SELECT * FROM Foo WHERE id > {{floor}} limit 1000; 

我發現,我能做些什麼作爲概括here

而是跳過大警告讓我覺得我不應該使用的。 (假設收集足夠大,它很重要)。

我的集合除了自動生成的_id字段外沒有任何索引。我不確定是否有一種方法可以使用這個和$ gt $ lt。

如果它的事項,我將使用卡斯巴司機,萬一有內置的祕訣。

回答

2

是SQL查詢的字面翻譯蒙戈是

db.foo.find({"id": {"$gt": floor}}).limit(1000) 

這種查詢可以由id字段上的索引(或_id上的默認索引(如果使用該列而不是一個名爲id的索引)提供服務)。

limit()沒有任何性能問題,但對於非常大的值,skip()可能表現不佳,因爲服務器本質上需要遍歷大量記錄,才能開始將結果返回給您。

+0

對,我只有_id默認索引,所以我不知道min id是從哪開始的。儘管如此,我想如果我從0開始並限制1000,然後取最後一個_id並增加它,它可以工作......對嗎? – 2012-04-04 21:53:45

+0

事實上,我可以做一些像db.foo.find({_id:{$ gt:new ObjectId(「000000000000000000000000」)}}).limit(1000)來讓我開始。尼斯。 – 2012-04-04 22:06:00

+1

對於分頁,建議使用該方法(記住最後一個,然後開始)。你可以做'db.foo.find({_ id:{$ gt:{last_object_id}})。sort({_ id:1})。limit(num_per_page)'。 Rembmer使用'sort()',否則你可能會得到奇怪的結果。 – dcrosta 2012-04-05 12:46:57