【问题标题】:Date range query on ObjectId in MongoDB using Spring REST pagination使用 Spring REST 分页对 MongoDB 中的 ObjectId 进行日期范围查询
【发布时间】:2018-02-02 16:24:07
【问题描述】:

我需要在用户集合中进行日期范围查询。但是它没有日期字段。我找到了一些有用的资源,可以先将时间转换为 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类?

用户.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}
}

【问题讨论】:

    标签: java spring mongodb rest pagination


    【解决方案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);
    

    【讨论】:

    • 我会试一试的。如何导入 ObjectId?
    • 它在 mongodb bson 包中。试试 org.bson.types.ObjectId
    猜你喜欢
    • 2012-11-15
    • 2018-05-13
    • 2014-11-28
    • 1970-01-01
    • 2021-05-18
    • 2011-07-28
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    相关资源
    最近更新 更多