2014-10-07 318 views
0

编辑 - 语境:我使用了Talend ETL工具,并在像查询中使用ISODate或日期或新的日期下面的失败,错误,所以我需要一个解决办法:

{'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

error: { "$err" : "Can't canonicalize query: BadValue unknown top level operator: $date", "code" : 17287 }

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

enter image description here

我见过的其他例子,其中使用了$日期操作员工作,但无法在我的机器上完成。

有谁知道为什么?

回答

2

$date为工具mongoimportmongoexport等蒙戈外壳都不能认呢,你应该使用Date()ISODate()代替准备。

+0

向导,我的歉意,我使用了一个名为Talend的ETL工具,并且由于某种原因,我的查询中无法使用Date()或ISODate()。有人建议我看看$ date操作符。 – 2014-10-07 02:39:03

+0

@Matthew Moisen,也许你可以尝试'{$ date:}',毫秒= new Date(“dateString”).getTime()。 – Wizard 2014-10-07 02:47:34

+0

感谢这个提示@Wizard,它的非常重要的一点是要考虑的。我们不应该试图通过使用java代码生成的查询来测试,并在shell中打印相同的结果。它不会工作。对于使用ISODate的壳,它的效果最好。 – 2017-04-22 11:21:49