Да, в MongoDB есть функционал называемый "upsert", который позволяет в одном запросе обновить (если запись существует) или вставить (если запись не существует) элемент в массив.
Для этого вам потребуется использовать оператор "$addToSet" в комбинации с оператором "$set". Оператор "$addToSet" добавляет элемент в массив только в том случае, если он еще не существует в массиве. Оператор "$set" используется для обновления поля базы данных.
Пример использования:
db.collection.update( { _id: ObjectId("идентификатор записи") }, // условие выборки записи { $addToSet: { // добавление элемента в массив, если его нет arrayField: "новый элемент" }, $set: { // обновление другого поля someField: "новое значение" } }, { upsert: true } // параметр upsert устанавливает режим "обновить или вставить" )
В данном примере обновление происходит для записи с определенным идентификатором, и если такая запись существует, то элемент "новый элемент" добавляется в массив "arrayField" только в том случае, если его там еще нет. Поле "someField" тоже обновляется с новым значением. Если же запись не существует, то она будет создана, и в нее будут вставлены указанные элементы и поля.
Обратите внимание на параметр upsert: true
, который устанавливает режим "обновить или вставить". Это обязательный параметр при использовании оператора "$addToSet" и "$set" в комбинации.
Таким образом, использование операторов "$addToSet" и "$set" с параметром upsert: true
позволяет обновить или вставить элемент в массив в одном запросе к базе данных MongoDB.