У меня есть коллекция сообщений с отметками времени updated_at. Я хочу получать документы партиями, отсортированные по метке времени updated_at (сначала самые последние) без использования пропуска (поскольку это замедляется при больших значениях). Я мог бы передать отметку времени последнего документа набора в следующий запрос и использовать {$lt => last_time_stamp}
для получения следующего пакета, но нет гарантии уникальности updated_at (может быть несколько вставок/записей одновременно). Другой подход может заключаться в том, что я использую $lte и отбрасываю повторяющиеся записи на стороне клиента (опять же, это может быть ошибкой, если размер пакета состоит только из повторяющихся записей, то есть все записи в пакете были отправлены с одной и той же меткой времени). Обратите внимание, что отметка времени updated_at изменяется в зависимости от некоторых конкретных событий, поэтому я не могу полагаться на идентификатор BSON для заказа.
Как обеспечить получение (создание) уникального идентификатора в виде идентификатора BSON с использованием метки времени updated_at и как изменить его всякий раз, когда изменяется updated_at, чтобы менялся порядок. Я использую mongoid в приложении для рельсов.
Существуют ли какие-либо другие подходы для достижения этого? В настоящее время я запрашиваю так:
Post.desc(:updated_at).where(:user => user).where(:updated_at.lt => last_entry_timestamp).limit(10)