Можно ли в одном запросе обновить (если существует) или вставить (в противном случае) элемент в массив?

Да, в 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.