Mongotemplate - 根据大于 (gt) 或小于 (lt) 运算符查询 ObjectId



当我在 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 值。

相关内容

最新更新