使用Spring REST分页在MongoDB中对ObjectId进行日期范围查询

时间:2018-02-02 16:24:08

标签: java spring mongodb rest pagination

我需要在users集合中进行日期范围查询。但是它没有日期字段。我发现了一些有用的资源,首先将时间转换为ObjectId,然后在Mongodb shell中对其进行查询:

>var idMin = ObjectId(Math.floor((new Date('2018/1/1'))/1000).toString(16) + "0000000000000000")
>var idMax = ObjectId(Math.floor((new Date('2018/2/1'))/1000).toString(16) + "0000000000000000")
>db.users.find({_id:{$gt: idMin, $lt: idMax}})

我的项目将获得前端的时间范围,将其转换为ObjectId字符串(idMin,idMax),然后请求Spring REST API获取数据。如何使用带可分页的Spring实现查询?在spring mongodb lib中有一个ObjectId类吗?

User.java:

@Document(collection = "users")
    public class User {

    @Id
    private String id;

    private String name;

    private int age;
}

UserRepository.java

@RequestMapping(path = "/users/{idMin}/{idMax}", method = RequestMethod.GET)
public interface UserRepository extends MongoRepository<User, String> {

    Page<User> findAll(Pageable pageable);

    //TODO: query on id range {idMin, idMax}
}

1 个答案:

答案 0 :(得分:1)

您可以尝试类似

的内容

致电代码:

ObjectId idMin = new ObjectId(new Date("2018/1/1"));
ObjectId idMax = new ObjectId(new Date("2018/2/1"));
Pageable pages = new PageRequest(1, 2);

Page<User> results = repository.findByObjectIdsAndPages(idMin, idMax, pages);

存储库

 @Query("{_id:{$gt: ?0, $lt: ?1}}")
 Page<User> findByObjectIdsAndPages(ObjectId idMin, ObjectId idMax, Pageable pages);