2014-01-12 69 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