2014-01-12 68 views
0

我發現使用mongoOperations的查詢中的skip()行爲很有趣。春天的數據mongodb查詢skip()不適合它。

我有這樣的代碼:

if (question.getCategory() == "" && question.getDifficulty() == 0 && question.getNumberOfCorrectAnswers() == 0) 
     return mongoOperations.find(new Query(Criteria.where("question").regex(questionPattern, "i")) 
     .limit(getLimit()).skip(getSkip()), Question.class); 

我用它在我的搜索方法。我想做一個分頁。例如,將結果限制爲10並跳過前5個。

limit()工作得很好,但當值爲1時跳過()會顯示集合中的第一個文檔。 limit()默認爲0,因爲不縮短範圍。

我在mongodb shell中檢查並跳過(1)正在查看從第二個文檔開始的文檔。

有人知道如何解決這個問題嗎?

+0

你嘗試調試代碼?我懷疑你甚至不訪問if子句。 'question.getCategory()==「」'爲false(身份)。應該是'「」.equals(question.getCategory())' –

+1

我發現了真正的問題。我使用angularJS,並通過一些神祕的方式,我的ng模型相互碰撞,並從2個輸入綁定2個不同的模型,第一個值進入第二個範圍,而不是第一個像它應該。 – Archer

+0

看起來你在查詢中缺少'sort'?沒有使用特定的排序順序,「skip」不會返回您的分頁的可預測結果。 – Stennie

回答

1

你可以試試這個來代替:

Criteria criteria = Criteria.where("question").regex(questionPattern, "i"); 
Query query = Query.query(criteria); 
query.limit(getLimit()); 
query.skip(getSkip()); 
return mongoOperations.find(query, Question.class); 
+0

它給出了相同的效果。我有6個文件在集合中。當我跳過2時,它顯示前2,而不是3到6。 – Archer