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

Sim*_*mon 8 mongodb spring-data objectid

当我将它输入我的consol时,它可以工作:

db.posts.find({"_id": {$lt:ObjectId("55732dccf58c555b6d3f1c5a")}}).limit(5).sort({"_id":-1})
Run Code Online (Sandbox Code Playgroud)

当我使用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;

  }
Run Code Online (Sandbox Code Playgroud)

我尝试使用此查询,它可以工作,但只返回与id相关的特定条目:

query.addCriteria(Criteria.where("_id").is("55732dccf58c555b6d3f1c5a"));
Run Code Online (Sandbox Code Playgroud)

我也试过Basic Query并做了这个,它也返回一个空白数组:

BasicQuery query1 = new BasicQuery("{'_id': {$lt:'ObjectId(\"55732dccf58c555b6d3f1c5a\")'}}).limit(5).sort({'_id':-1}");
Run Code Online (Sandbox Code Playgroud)

我很难过.如何在数据库中返回某个Mongo ObjectID下面的所有文档?

Sim*_*mon 11

在搜索了一个小时之后,我找到了解决方案 - 我不得不看一下这篇不在java但在node.js中的帖子.

在node.js应用程序中查询基于Mongo ID的MongoDB

值得庆幸的是,语言接近java,所以我看到你只能通过将objectID插入lt运算符来查询.您必须创建一个objectID对象并将其插入到运算符中.

      ObjectId objID = new ObjectId("55732dccf58c555b6d3f1c5a");
      query.addCriteria(Criteria.where("_id").lt(objID));
Run Code Online (Sandbox Code Playgroud)