Мой вариант использования выглядит следующим образом: У меня есть сборник документов в mongoDB, который я должен отправить для анализа. Формат документов выглядит следующим образом:
{_id: ObjectId ( "517e769164702dacea7c40d8" ), дата: "1359911127494", Статус: "доступен", other_fields...}
У меня есть процесс чтения, который выбирает первые 100 документов со статусом: доступно отсортировано по дате и изменяет их со статусом: обработка. ReaderProcess отправляет документы для анализа. После завершения анализа состояние будет изменено на обработанное.
В настоящее время процесс чтения сначала выбирает 100 документов, отсортированных по дате, а затем обновляет статус для обработки для каждого документа в цикле. Есть ли лучшее/эффективное решение для этого случая?
Кроме того, в будущем для масштабируемости мы можем использовать более одного процесса чтения. В этом случае я хочу, чтобы 100 документов, выбранных одним процессом чтения, не могли быть выбраны другим процессом чтения. Но выборка и обновление - это отдельные запросы прямо сейчас, поэтому очень возможно, что несколько процессов чтения выбирают одинаковые документы.
Массовая findAndModify (с лимитом) решила бы все эти проблемы. Но, к сожалению, он еще не представлен в MongoDB. Есть ли решение этой проблемы?