MongoDB如何用$ date运算符查询?

时间:2014-10-07 02:30:30

标签: mongodb mongodb-query

编辑 - 上下文:我使用Talend ETL工具并在查询中使用ISODate或Date或new Date,如下所示失败并出现错误,因此我需要解决此问题:

{'dt' : ISODate('2014-01-01') }
{'dt' : Date('2014-01-01') }
{'dt' : new Date('2014-01-01') }

如果没有以下错误,我无法这样做:

at com.mongodb.util.JSONParser.read(JSON.java:272)
at com.mongodb.util.JSONParser.parse(JSON.java:161)
at com.mongodb.util.JSONParser.parseObject(JSON.java:231)
at com.mongodb.util.JSONParser.parse(JSON.java:195)
at com.mongodb.util.JSONParser.parse(JSON.java:145)
at com.mongodb.util.JSON.parse(JSON.java:81)
at com.mongodb.util.JSON.parse(JSON.java:66)

大概是因为ETL工具调用了:

com.mongodb.DBObject myQuery_tMongoDBInput_1 = (com.mongodb.DBObject) com.mongodb.util.JSON
                    .parse("{'dt': new Date('2000-01-01T08:00:00Z')}");

鉴于我无法在new Date()方法的查询中使用com.mongodb.util.JSON.parse(),是否有解决方法?


我使用MongoDB v2.6.3并且无法让$ date运算符工作。

db.testdate.insert( {dt:ISODate('2014-01-01')} )
db.testdate.find()

enter image description here

db.testdate.find( {dt : {$date : '2014-01-01T00:00:00Z'}} )

enter image description here

  

错误:{           " $ ERR" :"无法规范查询:BadValue未知顶级运算符:$ date",           "代码" :17287}

db.testdate.find(  {dt : {$gte : {$date : '2000-01-01T00:00:00Z'}}} )

enter image description here

我已经看过使用$ date运算符的其他示例,但无法在我的计算机上执行此操作。

有谁知道为什么?

3 个答案:

答案 0 :(得分:6)

$date已为工具mongoimportmongoexport等做好准备.Mongo shell无法识别它,您应该使用Date()ISODate()代替。

答案 1 :(得分:4)

基于什么是written in documentation{ "$date": "<date>" }用于严格模式和mongoshell,您需要使用new Date ( <date> )

了解you should query by dates(基本上使用$gte, $gt, $lte, $lt)。

以下是一些相关答案:onetwo

答案 2 :(得分:1)

使用$ date运算符时,应将其传递给Long值,以指示“ Epoch Unix时间戳”

like:{“ time”:{“ $ gte”:{“ $ date”:1570654800000}}}

请注意,只有mongodump和mongoexport可以解释$ date,这在mongo shell中不起作用