Задать вопрос
@hax
junior developer

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

Привет! Подскажите, пожалуйста, можно ли в одном запросе обновить/вставить элемент в массив?

Пробую с помощью позиционного оператора найти элемент в массиве и если он существует, то обновить его данные, в противном случае необходимо создать новый элемент в массиве.

Вот пример моего запроса: https://mongoplayground.net/p/LYlNArEw_zJ
У меня есть элемент с полями country=UK и currency=EUR, я хочу попытаться вставить в массив prices ещё один объект с полями country=UK и currency=GBP, но операция insert не срабатывает.

То есть, условия задачи такие:
1. Сам родительский документ Product существует всегда, как и поле prices.
2. На вход подается объект типа { country: string, currency: string, value: number }
3. Если в массиве `prices` есть такой элемент с указанными country и currency, то нужно обновить его значение value.
4. Если же нет такого элемента, то необходимо вставить новый элемент в массив.
  • Вопрос задан
  • 48 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019
Bigdata Engineer
Поищи по ключевому слову upsert. Это типа insert + update.
Ответ написан
@nemolayn
Создатель бота Nemo
Используй:
async function(params, paramsToUpdate, t)

let find = await db.....findOne({params})
if(find){
if(t == "update"){
await db....updateOne({params}, {paramsToUpdate}
} else if(t == insert){
// инсерт
} else {
return "err"
}

} else {
// процесс рега нового документа
}
return True
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы