У меня есть код, который проверяет каждый объект в коллекции Mongo (перебирая результат find() без параметров) и вносит изменения в некоторые из них. Кажется, это небезопасно: мои изменения сохраняются, но затем, когда я продолжаю перебирать курсор, подмножество измененных объектов (10-15%) появляется во второй раз. Я не менял идентификатор документа или что-то еще, на что есть индекс.
Я полагаю, что мог бы избежать этой проблемы, заранее захватив все идентификаторы документов (преобразовав курсор в массив), но это большие коллекции, поэтому я бы очень хотел этого избежать.
Я заметил, что результат find() по умолчанию не имеет определенного порядка, поэтому я попытался указать явную сортировку курсора {"_id":1}. Кажется, это устранило проблему - теперь ничего не появляется дважды, независимо от того, что я изменяю. Но я не знаю, хороший ли это/надежный подход. Насколько я могу судить из документации, добавление сортировки не приводит к предварительному запросу всех идентификаторов; если да, то это хорошо, но тогда я не знаю, почему это решит проблему.
Это просто плохая идея использовать курсоры при изменении материала?
Я использую Scala/Casbah, если это имеет значение.