Я хочу обновить объект внутри массива схем без необходимости делать два запроса к базе данных.В настоящее время я увеличиваю поле с помощью findOneAndUpdate (), если объект уже существует, и он работает нормально.но в случае, если объект не существует, я должен сделать еще один запрос, используя update (), чтобы выдвинуть новый объект и сделать его доступным для последующих приращений.
Я хочу иметь возможность сделать только один запрос (например, findOne ()), чтобы получить пользователя, а затем увеличивать поле, только если объект существует в массиве, и если нет, я бы вместо этого хотел выдвинуть новый объект,затем сохраните документ.таким образом я делаю только одно чтение / запрос из базы данных вместо двух.
теперь это функция:
async addItemToCart(body, userId) {
const itemInDb = await Model.findOneAndUpdate(
{
_id: userId,
'cart.productId': body.productId,
},
{ $inc: { 'cart.$.count': 1 } }
);
if (itemInDb) return true;
const updated = await Model.update(
{ _id: userId },
{ $push: { cart: body } }
);
if (updated.ok !== 1)
return createError(500, 'something went wrong in userService');
return true;
}
, что я хотел бы сделать:
async addItemToCart(body, userId) {
const itemInDb = await Model.findOne(
{
_id: userId,
'cart.productId': body.productId,
}
);
if (itemInDb) {
/**
*
* increment cart in itemInDb then do itemInDb.save() <<------------
*/
} else {
/**
* push product to itemInDb then save
*/
}
Спасибо!