在mongodb中使用ISODate进行日期查询似乎不起作用

我似乎甚至无法获得最基本的日期查询来在MongoDB中工作。使用看起来像这样的文档:

{

"_id" : "foobar/201310",

"ap" : "foobar",

"dt" : ISODate("2013-10-01T00:00:00.000Z"),

"tl" : 375439

}

和一个查询,看起来像这样:

{ 

"dt" : {

"$gte" : {

"$date" : "2013-10-01T00:00:00.000Z"

}

}

}

我从执行中得到 :

db.mycollection.find({

"dt" : { "$gte" : { "$date" : "2013-10-01T00:00:00.000Z"}}

})

知道为什么这行不通吗?

作为参考,此查询由Spring的MongoTemplate生成,因此我无法直接控制最终发送给MongoDB的查询。

(PS)

> db.version()

2.4.7

谢谢!

回答:

尽管它$date是MongoDB Extended

JSON的一部分,但这是您默认使用的,mongoexport我认为您不能真正将其用作查询的一部分。

如果尝试使用$date类似以下的精确搜索:

db.foo.find({dt: {"$date": "2012-01-01T15:00:00.000Z"}})

你会得到错误:

error: { "$err" : "invalid operator: $date", "code" : 10068 }

试试这个:

db.mycollection.find({

"dt" : {"$gte": new Date("2013-10-01T00:00:00.000Z")}

})

或(在@user3805045之后发表评论):

db.mycollection.find({

"dt" : {"$gte": ISODate("2013-10-01T00:00:00.000Z")}

})

ISODate可能还需要比较没有时间的日期(@MattMolnar指出)。

根据mongo Shell中的数据类型,两者应等效:

mongo shell提供了多种返回日期的方法,这些方法可以是字符串,也可以是Date对象:

  • Date()方法,以字符串形式返回当前日期。
  • 新的Date()构造函数,该构造函数使用ISODate()包装器返回Date对象。
  • ISODate()构造函数,该构造函数使用ISODate()包装器返回Date对象。

并且using ISODate应该仍然返回Date对象。

{"$date": "ISO-8601 string"}当需要严格的JSON表示形式时可以使用。Hadoop连接器就是一个可能的例子。

以上是 在mongodb中使用ISODate进行日期查询似乎不起作用 的全部内容, 来源链接: utcz.com/qa/418634.html

回到顶部