Spring Data Mongodb - 获取页面上的最后一项

时间:2015-06-12 18:03:36

标签: java pagination spring-data spring-data-mongodb

这是我目前在Spring Data MongoDB上的分页方法:

  @RequestMapping(value="/nextposts", method=RequestMethod.GET)
  public List getNextPosts(@RequestParam int next) {
    Pageable pageable = new PageRequest(next, 5, new Sort(new Sort.Order(Direction.DESC, "id")));
    page = repo.findAll(pageable);
    return page.getContent(); 
  }

正如您所看到的,我正在按照" next"指定的方式获取页面。变量,然后将其返回给用户。

我试图处理页面中返回的最后一个文档,特别是获取它的ObjectId以便我可以实现"方法2"与mongodb快速分页:http://blog.mongodirector.com/fast-paging-with-mongodb/

我查看了PageRequest和Pageable的文档,但没有一个方法会返回页面中的最后一个文档。

可分页:http://docs.spring.io/spring-data/data-commons/docs/current/api/org/springframework/data/domain/Pageable.html

PageRequest:http://docs.spring.io/spring-data/data-commons/docs/current/api/org/springframework/data/domain/PageRequest.html

有谁知道如何做到这一点?

2 个答案:

答案 0 :(得分:0)

最终我无法使用MongoRepository。

我不得不使用MongoOperation / MongoTemplate来完成这项任务。

  @RequestMapping(value="/XXX", method=RequestMethod.GET)
  public List getNextPosts(@RequestParam String next) {
      Query query = new Query();
      query.with(new Sort(Sort.Direction.DESC, "_id"));
      query.limit(5);
      ObjectId objID = new ObjectId(next);
      query.addCriteria(Criteria.where("_id").lt(objID));
      List<Posts> posts = mongoOperation.find(query, Posts.class);
      return posts;
  }

答案 1 :(得分:-1)

Simon实际上你必须定制一些可分页的逻辑来获得更多的功能&#34;因为我不认为最后一项可以就是这样。

这里是一个很好的例子,您可以在其中定义适当的页面资源模型并向其中添加一些元数据。链接,如first,last,NEXT rels。

http://www.javaenthusiasm.com/rest-pagination-with-spring-boot/

告诉我你是否需要更多解释。