2015-12-17 1 views
1

Когда я пытаюсь выполнить поиск через oplog «ts», я столкнулся со следующей проблемой.Mongodb: Поиск с использованием метки времени ts из Oplog

db.oplog.rs.find({ts: {$gte: Timestamp(ISODate("2012-12-15T00:00:00Z").getTime(),0)}}).pretty().limit(1) 

2015-12-17T16:42:22.804+0530 E QUERY Error: The first argument must be in seconds; 1355529600000 is too large (max 2147483647) at (shell):1:30

Почему это происходит?

ответ

3

Кажется, проблема связана с тем, как вы используете функцию Timestamp.

Таким образом, значение (ISODate («2012-12-15T00: 00: 00Z»). GetTime()) составляет 1355529600000, что составляет в основном число миллисекунд с 1970/01/01, см. mongodb converting isodate to numerical value.

Ошибка возникает, когда вы используете это значение 1355529600000 в качестве первого параметра функции Timestamp, которая ожидает, что первый параметр будет в секундах с максимальным значением 2147483647. Возможно, вы захотите изменить способ использования метки времени функция, основанная на ваших требованиях.


См результат 2 работает, сначала с помощью GetTime(), а второй из вызывающей функции Timestamp:

1. 
$ var ts = ISODate("2012-12-15T00:00:00Z").getTime() 
$ ts 
1355529600000 

2. 
$ var ts = Timestamp(ISODate("2012-12-15T00:00:00Z").getTime(),0) 
2015-12-17T21:42:43.876+0530 E QUERY Error: The first argument must be in seconds; 1355529600000 is too large (max 2147483647) 
    at (shell):1:10 
Смежные вопросы