mongodb中根据时间范围进行查询

本文探讨了在MongoDB中如何根据时间范围进行查询。针对时间字段位于数据顶层结构和嵌套数据结构两种情况,分别提供了实现方法。对于顶层结构,可以简单使用eq、gt等方法;而对于嵌套结构,需要指定完整的查询路径。这些查询技巧不仅适用于时间类型,也适用于其他类型的字段查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时间字段处于数据顶层结构中

例如: 当前数据库中有1000条数据,数据的结构为:

{
    "_id" : { "$oid" : "587dc4069f527a223ca81f4f" }, 
    "index" : 664, 
    "create" : { "$date" : 1484637190565 }
}

时间字段create就处于数据的最顶层,这种类型的数据查询实现其实很简单,是需要使用eq、gt等方法即可,例如:
- 实现方法一

collection.find(
        new Document("create", 
            new Document("$gt", new Date(1484637189630l))
        )
    ).forEach(new Block<Document>() {
                public void apply(Document document) {
                    System.out.println(document.toJson());
                }
    });
  • 实现方法二
collection.find(gt("create",new Date(1484637189630l))).forEach(
    new Block<Document>() {
                public void apply(Document document) {
                    System.out.println(document.toJson());
                }
});

时间字段处于数据的嵌套数据结构中

例如:当前数据库中有1000条数据,数据的结构为:

{ 
    "_id" : { "$oid" : "587dc4069f527a223ca81f51" }, 
    "index" : 666, 
    "times" : { 
        "ct" : { "$date" : 1484637190587 } 
    } 
}

时间字段ct处于嵌套数据times中,遇到这种结构的数据,还需要根据时间为条件进行查询数据,就需要以ct的完整查询路径为查询条件进行查询,例如:
- 实现方法一

collection.find(
        new Document("times.ct", 
            new Document("$gt", new Date(1484637189630l))
        )
    ).forEach(new Block<Document>() {
                public void apply(Document document) {
                    System.out.println(document.toJson());
                }
    });
  • 实现方法二
collection.find(gt("times.ct",new Date(1484637189630l))).forEach(
    new Block<Document>() {
                public void apply(Document document) {
                    System.out.println(document.toJson());
                }
});

这两种方法中均采用点号“.”分割,将ct的完整路径作为查询参数进行查询。

这种查询方法其实在非时间类型上也是适用,不过这是我平时没有注意到的一个细节问题,记录下来方便查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值