#node.js #mongodb #mongoose
#node.js #mongodb #mongoose
Вопрос:
в моей пользовательской модели есть корзина с элементами (массив). Я хочу проверить, достаточно ли запасов для каждого товара в его корзине, и если нет, обновить количество товара в его корзине до доступного запаса (заполняется ProductID).
}
})
Ну, ‘cart.items [i].quantity’ было бы слишком просто, это не работает: D
Пользователь: [![введите описание изображения здесь][1]][1]
Продукт: [![введите описание изображения здесь][2]][2]
Комментарии:
1. Как выглядит документ? Можете опубликовать несколько примеров документов.
2. Добавлены скриншоты (да, я знаю, что ProductID не совпадает, это пример)
Ответ №1:
Это код, который вы предоставили.
user.cart.items.forEach((item, i) => {
if (item.quantity > item.productId.stock) {
User.findByIdAndUpdate(user._id, {'cart.items[i].quantity': item.productId.stock})
}
})
Из приведенного выше кода я вижу, что у нас есть productId
элемент, который нужно обновить. Так зачем использовать индекс, когда у нас есть productId
? В любом случае я создал образец документа на основе ваших скриншотов и создал запрос, который обновляет его на quantity
основе productId
. Вы можете перейти по ссылке mongo playground, запустить запрос и внести изменения в соответствии с вашими потребностями.
Попробуйте этот запрос-
db.collection.update({
_id: 1
},
{
"$set": {
"cart.items.$[element].quantity": 2 /**where 2=item.productId.stock*/
}
},
{
arrayFilters: [
{
"element.productId": 100
}
]
})
Вот игровая площадка Mongo
Редактировать :
Если вы все еще хотите сделать это с помощью index.
db.collection.update({
_id: 1
},
{
"$set": {
"cart.items.1.quantity": 2/**where 1 is index and 2=item.productId.stock*/
}
})
Вот игровая площадка
Комментарии:
1. Спасибо за поддержку. Я также обновил ответ для индексного запроса.