2014-10-07 4 views
0

Edit - Контекст: Я использую инструмент ETL Talend и используя 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 подготовлен для инструментов mongoimport, mongoexport и т.д. Монго оболочка не может распознать его, вы должны использовать Date() или ISODate() вместо этого.

+0

Wizard, мои извинения, я использую инструмент ETL под названием Talend и не могу использовать Date() или ISODate() в моих запросах по какой-то причине. Было предложено взглянуть на оператор $ date. –

+0

@Matthew Moisen, Возможно, вы можете попробовать '{$ date: }', milliseconds = new Date ("dateString"). GetTime(). – Wizard

+0

Спасибо за этот совет @Wizard, его ОЧЕНЬ ВАЖНУЮ ТОЧКУ, чтобы ее рассматривали. Мы также не должны пытаться протестировать его, взяв запрос, сгенерированный с использованием java-кода, и напечатаем его в оболочке. Это не сработает. Для использования оболочки ISODate он работает наилучшим образом. –

2

Основываясь на том, что written in documentation, { "$date": "<date>" } используется в строгом режиме и в mongoshell вам нужно использовать new Date (<date>)

Посмотрите, как you should query by dates (в основном с помощью $gte, $gt, $lte, $lt).

Вот несколько релевантных ответов: one и two.

Смежные вопросы