【发布时间】:2014-01-12 13:40:31
【问题描述】:
我发现使用 mongoOperations 的查询中的 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 的值时,skip() 会显示集合中的第一个文档。 limit() 默认为 0,不会缩短范围。
我检查了 mongodb shell,skip(1) 正在查看从第二个开始的文档。
有人知道如何解决这个问题吗?
【问题讨论】:
-
您是否尝试过调试您的代码?我怀疑您甚至没有访问 if 子句。
question.getCategory() == ""为假(身份)。应该是"".equals(question.getCategory()) -
我找到了真正的问题。我使用 angularJS,并且我的 ng-models 以某种神秘的方式发生碰撞,并且从由 2 个不同模型绑定的 2 个输入中,第一个值进入第二个范围,而不是应该的第一个范围。
-
您的查询中似乎缺少
sort?如果不使用特定的排序顺序,skip不会为您的分页返回可预测的结果。 -
根据 Mongo 文档,将 skip() 放在 limit() 之前可能很重要 - docs.mongodb.org/manual/reference/method/cursor.skip
标签: java spring mongodb spring-mvc spring-data