Есть ли в MongoDB способ обновить множество документов и получить документы, которые были изменены, за один вызов?

Я работаю с Java-драйвером Mongo, но просматривая документацию Mongo, он не выглядит специфичным для драйвера.

update(filter, update) может обновлять несколько документов, но возвращает WriteResult, который предоставляет только флаги/счетчики.

findOneAndUpdate(filter, update) возвращает фактический документ, который был изменен, но он может обновлять только один документ за раз.

Неужели нельзя сделать это за один звонок? В противном случае клиент должен будет вызвать find(filter), затем update(filter, update), затем find(...) с новым фильтром, соответствующим идентификаторам, полученным при первоначальной находке (поскольку обновление потенциально может изменить значения документа, которые были в исходном фильтре).

Есть ли способ лучше?


person NicholasFolk    schedule 25.08.2020    source источник
comment
Я не вижу способа добиться этого за один вызов... Документация по Java находится здесь: mongodb.github.io/mongo-java-driver/4.1/apidocs Возможно, если вы переформулируете свою цель, вы найдете альтернативные способы ее достижения. Мол, почему нужно получать только обновленные документы?   -  person Dima G    schedule 25.08.2020
comment
Да, я просматривал эти документы (в частности, коллекцию, но искал другие) и не нашел ничего, что соответствовало бы моему описанию. Тем не менее, документы довольно большие, поэтому не рекомендуется полностью просматривать документы, и легко что-то упустить. Поэтому я обращаюсь к сообществу   -  person NicholasFolk    schedule 25.08.2020


Ответы (1)


Я не знаю ни о каких командах записи, которые возвращают курсор, что, по сути, и есть то, о чем вы просите, и я не вижу ничего соответствующего в источнике драйвера.

person D. SM    schedule 25.08.2020