Моя проблема: дайте мне список документов старше X количества времени.
Если у меня есть документ, созданный с:
db.dates.insert({date: new Date()});
А теперьЯ хочу найти его только тогда, когда «дата» устарела через 30 минут:
db.dates.find({ $where: "this.date.getTime() + 30 * 60000 <= new Date()"});
Это работает, но в документации Mongo довольно ясно говорится о существенном снижении производительностик $ где запросы.
Таким образом, вопрос, есть ли лучший способ?
========== ОБНОВЛЕНИЕ 1 ==========
Я должен был добавить, что надеюсь, что эта функция запроса "динамически" будет создавать запрос один раз и использовать его для получения настраиваемого курсора на закрытой коллекции ... и я больше не уверен, чтона самом деле это возможно.
Я буду тестировать и перепечатывать.
========== ОБНОВЛЕНИЕ 2 ==========
Итак, похоже, что мою «отложенную» очередь нужно будет обрабатывать в коде, либо с помощью опроса, либо с помощью какого-либо алгоритма «проверить, потом спать», потому что это, похоже, задержка Монговыполняется репликация d (из db.cpp):
if ( replSettings.slavedelay && ( unsigned( time( 0 ) ) < nextOpTime.getSecs() + replSettings.slavedelay ) ) {
assert( justOne );
oplogReader.putBack( op );
_sleepAdviceTime = nextOpTime.getSecs() + replSettings.slavedelay + 1;
dblock lk;
if ( n > 0 ) {
syncedTo = last;
save();
}
log() << "repl: applied " << n << " operations" << endl;
log() << "repl: syncedTo: " << syncedTo.toStringLong() << endl;
log() << "waiting until: " << _sleepAdviceTime << " to continue" << endl;
return okResultCode;
}