2013-06-13 23 views
1

我瀏覽過各種示例,但未能找到我在找什麼..我想要的是通過_id搜索特定文檔並跳過多次通過使用一個查詢集合之間?或者對我來說足夠快的替代方案。Mongodb:跳過之間的收集值(不是正常的分頁)

下面的查詢將跳過第一個,提前第二回程:

db.posts.find({ "_id" : 1 }, { comments: { $slice: [ 1, 1 ] } }) 

這將是skip 0, return 1和結果離開休息了..

但如果將有什麼樣的10000條意見和我想用同樣的模式,但回報是這樣,數組值:

skip 0, return 1, skip 2, return 3, skip 4, return 5 

因此,這將返回收集其意見將是大小5000,因爲其中一半被跳過。這可能嗎?我應用了大量的10000,因爲我擔心使用多個查詢來應用這不會是性能明智的。(示例顯示在這裏:multiple queries to accomplish something similar)。日Thnx!

回答

0

我通過幾個資源去並得出結論,目前這是不可能使一個查詢..相反,我同意,目前只有兩種選擇來解決這個問題:

1)製作的環一些排序並運行幾個切片查詢,同時增加切片的位置。類似to resource I linked

var skip = NUMBER_OF_ITEMS * (PAGE_NUMBER - 1) 
db.companies.find({}, {$slice:[skip, NUMBER_OF_ITEMS]}) 

但是,根據數據的類型,我不想跑5000個個人查詢,只得到的數組內容的一半,所以我決定用選項2)用於這似乎我相對快速和性能明智。

2.)通過_id對單行查詢進行排序,然後將結果返回給客戶端或代碼的其他部分,然後使用for循環跳過不需要的數組項,然後返回結果。自從我通過morphia與mongo交談之後,我在java端做了這個。我還使用query explain()來解釋和理解返回單行數組有10000個項目,同時指定_id條件是如此之快,速度並不是真正的問題,我敢打賭,切片跳過只會更慢。