当我在 consol 中键入它时,它有效:
db.posts.find({"_id": {$lt:ObjectId("55732dccf58c555b6d3f1c5a")}}).limit(5).sort({"_id":-1})
当我使用 mongotemplate 时,它不起作用并返回一个空白数组:
@RequestMapping(value="/next", method=RequestMethod.GET)
public List getNextPost(@RequestParam String next) {
Query query = new Query();
query.addCriteria(Criteria.where("_id").lt("55732dccf58c555b6d3f1c5a"));
List<Posts> posts = template.find(query, Posts.class);
return posts;
}
我尝试使用此查询,它可以工作,但仅返回与id相关的特定条目:
query.addCriteria(Criteria.where("_id").is("55732dccf58c555b6d3f1c5a"));
我也尝试使用基本查询并这样做了,它还返回一个空白数组:
BasicQuery query1 = new BasicQuery("{'_id': {$lt:'ObjectId("55732dccf58c555b6d3f1c5a")'}}).limit(5).sort({'_id':-1}");
我被难住了。如何返回数据库中某个 Mongo 对象 ID 下的所有文档?
所以在搜索了一个小时后,我找到了解决方案 - 我不得不看看这篇文章,它不是在 java 中,而是在 node.js 中。
基于节点应用中的 Mongo ID 查询 MongoDB .js
值得庆幸的是,该语言接近java,因此我看到您无法仅通过将objectID插入lt运算符来查询。您必须创建一个 objectID 对象并将其插入到运算符中。
ObjectId objID = new ObjectId("55732dccf58c555b6d3f1c5a");
query.addCriteria(Criteria.where("_id").lt(objID));
这篇文章是救命稻草。 花了几个小时搜索这个。 我想补充一点,上面的答案进行了"lt"比较,但没有显示排序部分。
我发现当你在mongodb中进行"lt"或"gt"比较时,不能保证你会立即获得下一个ASC或DESC ObjectId。 事实上,我注意到当我到达收藏的末尾并执行"lt"时,它会重置并给了我收藏中的第一个文档(而不是它之前的那个)。 为此,我必须添加到我在这里找到的上述解决方案中:http://www.mkyong.com/mongodb/spring-data-mongodb-query-document/
Query nextStoryQuery = new Query(); //1
previousStoryQuery.addCriteria(Criteria.where("_id").lt(objID)).limit(1); //2
previousStoryQuery.with(new Sort(Sort.Direction.DESC, "_id")); //3
请注意,在第 2 行,我只是在寻找 1 个结果,所以我添加了限制函数。第 3 行:通过添加排序功能,它保证基于当前 ObjectId 值的即时 ASC 或 DESC ObjectId 值。