Нужно смотреть на опцию upsert. Вот рабочий пример для задачи выше:
db.users.updateOne(
{
userName: "username1",
someAdditionalID: 12345,
},
{
$push: {
userDataArray: {
name: "updated name",
description: "updated desc",
},
},
$setOnInsert: {
userName: "new username",
someAdditionalId: 478326,
},
},
{
upsert: true,
}
);
В случае если по запросу ничего не найдено, то создастся новый документ, это регулируется опцией
upsert: true. Если документ найден, то в массив запушится новый объект.
Поля для нового документа можно задать в
$setOnInsert.
Достичь такого результата можно разными методами, вот например ещё варианты:
https://www.baeldung.com/mongodb-upsert