如何使用spring在MongoDB上执行分页?

时间:2017-07-11 06:21:16

标签: java spring mongodb pagination

我有这个java代码,它使用spring框架从MongoDB获取项目列表:

    @Autowired
    private PersonsRepository personsRepository;
     ...
     ...


                         // the name field is NOT INDEXED!
    List<Person> dbRecords = personsRepository.findByName("John");
    for (Person person: dbRecords) {
           //do something
    }

我需要查询的字段未编入索引,并且在不久的将来无法更改。

由于数据库包含1亿个记录,并且输出列表预计包含数百万条记录,因此我几乎没有问题:

  1. 查询itselft( getByName )需要很多时间(几个小时后它没有完成)。我怎样才能做得更好?
  2. 如何使用分页查询数据?
  3. 由于

1 个答案:

答案 0 :(得分:0)

所以我似乎找到了如何使用分页:

我在界面中添加了一个新方法:

Page<Person> findByName(@Param("name") String name, Pageable pageable);

在代码本身中我做了:

    Page<Person> nextPage;
    List<Person> dbRecords;
    boolean stop = false;
    Sort sort = new Sort(new Sort.Order(Sort.Direction.ASC, SORT_FIELD));
    do {
        Pageable pageable = new PageRequest(0, PAGE_SIZE, sort);
        nextPage = personsRepository.findByName("john", pageable);           
        dbRecords = nextPage.getContent();
        if (dbRecords.size() > 0) {
            // do something
        } else {
            stop = true;
        }
    } while (nextPage.getSize() > 0 && !stop);

现在它的分页工作正常。