mongodb中字符串日期的比较


在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)"
}


  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 MongoDB 聚合操作,可以使用 `$toInt` 运算符将字符串转换为整数。下面是一个使用 `$toInt` 的聚合示例: ``` db.collection.aggregate([ { $project: { stringField: 1, intField: { $toInt: "$stringField" } } } ]) ``` 在上面的聚合操作,使用 `$project` 聚合阶段来创建一个新的文档,并使用 `$toInt` 运算符将名为 `stringField` 的字段字符串转换为整数,并将结果存储在名为 `intField` 的新字段。 需要注意的是,如果字符串无法转换为整数,将返回 `null`。此外,在 MongoDB 4.0 之前的版本,如果使用 `$toInt` 运算符将一个非数字字符串转换为整数,将会抛出错误。从 MongoDB 4.0 开始,如果无法转换为整数,则将返回 `null`。 ### 回答2: 在MongoDB的聚合操作,我们可以使用一些聚合管道操作符将字符串转换为整数。下面是一种常见的方法: 使用$convert操作符: ``` db.collection.aggregate([ { $project: { convertedValue: { $convert: { input: "$stringField", to: "int", onError: 0, // 当转换失败时,设定默认值为0 onNull: 0 // 当输入值为null时,设定默认值为0 } } } } ]) ``` 在上述示例,我们使用了$project操作符来创建一个新字段"convertedValue",该字段的值是将"stringField"字段转换为整数后的结果。我们使用了$convert操作符来执行转换操作。设置了to参数为"int",以将字符串转换为整数。 此外,我们还可以使用其他一些聚合管道操作符来处理字符串转换为整数的场景,例如$toInt、$toIntOrNull、$toIntOrDefault等。具体使用哪个操作符取决于您的需求和数据的情况。 总的来说,在MongoDB的聚合操作,有多种方法可以将字符串转换为整数。您可以根据实际情况选择最适合您需求的操作符。 ### 回答3: 在MongoDB,聚合操作是用于对集合的文档进行计算和转换的强大工具。要将字符串转换为整数,您可以使用聚合操作的$toInt算子。 $toInt算子用于将输入值转换为整数。它可以将字符串转换为整数,也可以将浮点数、布尔值甚至是日期对象转换为整数。 下面是一个示例,展示如何在聚合管道使用$toInt算子将字符串转换为整数: ``` db.collection.aggregate([ { $project: { convertedValue: { $toInt: "$stringValue" } } } ]) ``` 在上面的示例,我们使用$project阶段将stringValue字段的值转换为整数,并将结果存储在新的convertedValue字段。您可以根据需要调整$project阶段的内容和其他聚合阶段。 需要注意的是,如果要转换的字符串包含非数字字符,将会发生转换错误。因此,在执行转换之前,请确保字符串仅包含数字字符。 希望这个回答对您有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值