Jas*_*tes 170 json mongodb bson isodate
我似乎无法在MongoDB中使用最基本的日期查询.使用看起来像这样的文档:
{
"_id" : "foobar/201310",
"ap" : "foobar",
"dt" : ISODate("2013-10-01T00:00:00.000Z"),
"tl" : 375439
}
Run Code Online (Sandbox Code Playgroud)
一个看起来像这样的查询:
{
"dt" : {
"$gte" : {
"$date" : "2013-10-01T00:00:00.000Z"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我从执行中得到0结果:
db.mycollection.find({
"dt" : { "$gte" : { "$date" : "2013-10-01T00:00:00.000Z"}}
})
Run Code Online (Sandbox Code Playgroud)
知道为什么这不起作用吗?
作为参考,此查询由Spring的MongoTemplate生成,因此我无法直接控制最终发送到MongoDB的查询.
(PS)
> db.version()
2.4.7
Run Code Online (Sandbox Code Playgroud)
谢谢!
zer*_*323 285
虽然它$date是MongoDB Extended JSON的一部分,但这是你默认获得的,mongoexport我不认为你可以真正使用它作为查询的一部分.
如果尝试精确搜索,$date如下所示:
db.foo.find({dt: {"$date": "2012-01-01T15:00:00.000Z"}})
Run Code Online (Sandbox Code Playgroud)
你会得到错误:
error: { "$err" : "invalid operator: $date", "code" : 10068 }
Run Code Online (Sandbox Code Playgroud)
试试这个:
db.mycollection.find({
"dt" : {"$gte": new Date("2013-10-01T00:00:00.000Z")}
})
Run Code Online (Sandbox Code Playgroud)
或(以下@ user3805045的评论):
db.mycollection.find({
"dt" : {"$gte": ISODate("2013-10-01T00:00:00.000Z")}
})
Run Code Online (Sandbox Code Playgroud)
ISODate可能还需要在没有时间的情况下比较日期(由@MattMolnar注明).
根据mongo Shell中的数据类型,两者应该是等价的:
mongo shell提供了各种方法来返回日期,可以是字符串,也可以是Date对象:
- Date()方法,以字符串形式返回当前日期.
- new Date()构造函数,它使用ISODate()包装器返回Date对象.
- ISODate()构造函数,它使用ISODate()包装器返回Date对象.
并且ISODate 仍然应该返回Date对象.
{"$date": "ISO-8601 string"}可以在需要严格的JSON表示时使用.一个可能的例子是Hadoop连接器.
Ste*_*HHH 88
从MongoDB食谱页面评论:
"dt" :
{
"$gte" : ISODate("2014-07-02T00:00:00Z"),
"$lt" : ISODate("2014-07-03T00:00:00Z")
}
Run Code Online (Sandbox Code Playgroud)
这对我有用.在完整上下文中,以下命令获取dt日期字段在2013-10-01(YYYY-MM-DD)Zulu上的日期的每条记录:
db.mycollection.find({ "dt" : { "$gte" : ISODate("2013-10-01T00:00:00Z"), "$lt" : ISODate("2013-10-02T00:00:00Z") }})
Run Code Online (Sandbox Code Playgroud)
Jab*_*bba 11
试试这个:
{ "dt" : { "$gte" : ISODate("2013-10-01") } }
Run Code Online (Sandbox Code Playgroud)
我正在使用robomongo作为mongodb客户端gui,下面为我工作
db.collectionName.find({"columnWithDateTime" : {
$lt:new ISODate("2016-02-28T00:00:00.000Z")}})
Run Code Online (Sandbox Code Playgroud)
在应用程序方面,我正在使用基于nodejs的驱动程序mongodb(v1.4.3),该应用程序在ui中使用datepicker,其给出的日期类似于YYYY-mm-dd,然后附加默认时间(如00:00:00),然后给出到new Date()构造函数,然后提供给mongodb条件对象,我认为驱动程序将日期转换为ISO日期,然后查询可以工作并提供所需的输出,但是对于同new Date()一个机器人,相同的构造函数不起作用或不显示相同的输出条件,这很奇怪,因为我使用了robomongo来交叉检查我的条件对象。
而默认的cli mongoshell可以同时ISODate与new Date()
小智 5
在json严格模式下,您必须保持顺序:
{
"dt": {
"$gte": {
"$date": "2013-10-01T00:00:00.000Z"
}
}
}
Run Code Online (Sandbox Code Playgroud)
只有在mlab.com上定义我的搜索查询的东西.
| 归档时间: |
|
| 查看次数: |
329602 次 |
| 最近记录: |