在java项目中碰到操作mongodb中的字符串类型的日期,刚开始挺坑的,没有掌握要领.下面是我的一些总结.


1,因为mongodb中的字段是String类型的,比如:"date" : "2017-06-28"

 所以我们在java项目中要将其对应的字段定义为同样的类型.


2,在项目中作比较的时候直接按照如下的方式来,简单粗暴.

String startDate;


String endDate


Query query=new Query(Criteria.where("date").gte(startDate).lte(endDate));


这样就可以了.


3,注意在mongodb的命令行中这样使用.


db.getCollection('daily_user_actives').find({"date":{$gte:"2017-01-01",$lte:"2017-03-28"}})


查询到的结果如下:


/* 1 */

{
     "_id" : ObjectId("592f9e89e51258b1ba651d3f"),
     "appid" : "01F3334T9P3W10534r3R",
     "channel" : "10035",
     "country" : "--",
     "date" : "2017-03-28",
     "actives" : NumberLong(8)
 }




/* 2 */

{
     "_id" : ObjectId("592f9e89e51258b1ba651c64"),
     "appid" : "01F3334T9P3W10534r3R",
     "channel" : "10035",
     "country" : "AE",
     "date" : "2017-03-28",
     "actives" : NumberLong(2)
 }


ps:上面的命令行中的 "date","2017-01-01" 中的双引号都是不能省略的.写命令的时候先看看原来数据的保存类型及方式,切勿任性.

MongoDB有自己的时间类型ISODate


db.test.insert({"mark":1,"mark_time":new Date()})


 db.test.insert({"mark":2,"mark_time":Date()})

 db.test.find({})

 {
     "_id" : ObjectId("595444b1f004583b9a95a80f"),
     "mark" : 1.0,
     "mark_time" : ISODate("2017-06-29T00:07:13.511Z")
 }


 {
     "_id" : ObjectId("595444caf004583b9a95a810"),
     "mark" : 2.0,
     "mark_time" : "Thu Jun 29 2017 08:07:38 GMT+0800 (CST)"
 }