MongoDB массовая операция поиска, изменения, вставки документов

Используя MongoDB с spring mongo, я ищу удобный и эффективный способ копирования документов, соответствующих определенному запросу, и повторной массовой вставки их в ту же коллекцию с измененным одним из атрибутов.

РЕДАКТИРОВАТЬ: Возможно, вопрос был недостаточно ясен: я не ищу массовое обновление: в коллекции я хочу найти все документы, соответствующие foo="bar", изменить на foo="baz" и вставить измененный документы как копии в той же коллекции. AFAIR, упомянутый повторяющийся вопрос не распространяется на это.

Любые идеи по этому поводу?


person Mr.Radar    schedule 22.03.2017    source источник


Ответы (1)


При копировании вы должны убедиться, что вы не копируете идентификатор. Каждый документ имеет уникальный идентификатор внутри коллекции.

Вы можете запустить следующие команды MongoDB:

db.collection.insert({_id: '1234', val: "abcd"})
var existingDocument = db.collection.findOne({_id: '1234'}) // get a local copy of the document.
existingDocument._id = '5678'   // changing the copied document id.

db.collection.insert(existingDocument) // insert into the MongoDB the same document with different id.

Теперь запустим команду:

db.collection.find()

Вернется

{ "_id" : "1234", "val" : "abcd" }
{ "_id" : "5678", "val" : "abcd" }

Для обновления вы можете использовать следующую команду перед вставкой:

db.collection.update(
   { _id: "5678" },
   { $set: { "val": "xyz" } }
)

Теперь при запуске:

db.collection.find()

Результат будет:

{ "_id" : "1234", "val" : "abcd" }
{ "_id" : "5678", "val" : "xyz" }
person Rotem    schedule 22.03.2017