2014-12-16 2 views
0

Я пытаюсь фильтровать oplog.rs для просмотра операций, которые были зарегистрированы после определенной даты. Но операторы сравнения не похоже на работу с датами в MongoDB:Фильтрация и сортировка по датам в oplog MongoDB

db['oplog.rs'].find({ts: {$gte: ISODate("2014-12-15T00:00:00Z")}}) 

Что сбивает с толку много онлайновых источников говорят, чтобы сделать это так, но это, очевидно, не работает. Я хочу вернуть результаты, когда поле ts по крайней мере 15 декабря или более последнее, но я получаю результаты, которые явно до этого периода. Если я переключу $ gte с $ lte, результаты не будут отображаться вообще, хотя есть определенные записи как до, так и после указанной даты.

Кроме того, я тоже не могу сортировать результаты. Если я пытаюсь это:

db['oplog.rs'].find().sort({ts: -1}) 

я получаю это:

error: { 
    "$err" : "Runner error: Overflow sort stage buffered data usage of 33566005 bytes exceeds internal limit of 33554432 bytes", 
    "code" : 17144 
} 

Если бы я мог фильтровать результаты, чтобы сделать их более поздние, я надеюсь, что это поможет преодолеть эту ошибку сортировки, но я не могу даже делать это с основными операторами MongoDB. Как я могу отфильтровать результаты операции поиска по дате?

ответ

1

Операторы сравнения работают нормально с датой, но ts - объект Timestamp - не дата.

Ваш запрос должен выглядеть следующим образом:

db['oplog.rs'].find({ts: {$gte: Timestamp(ISODate("2014-12-15T00:00:00Z").getTime(),0)}}) 

Это создает объект Timestamp на основе ISODate и использует его в запросе.

+0

Спасибо за указание, что это временная метка! Я не знаю, как я это забыл. Однако, похоже, когда вы делите на 1000, он по-прежнему отображает результаты до этой даты, хотя, если я выберу/1000, он правильно отображает результаты с 15 декабря и далее. – CynicalProgrammer

+0

ОК, не делясь на 1000, вызвало исключение в моем тесте, но если работает для вас отлично :) – Martin

+0

почему вы используете запрос inc = 0.Timestamp (ISODate («2014-12-15T00: 00: 00Z»). GetTime (), 0). Как мы решаем inc timestamp.TimeStamp (time, inc). – user1234567

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