我正在写一个商店网站。我想将产品添加到购物车,所以有两种情况 1.具有该ID的产品在购物车中=>增加更多数量(已解决) 2.产品不存在=>创建一个新产品 那么如何检查购物车中是否存在产品(具有特定ID)? 我使用了另一个变量(让它存在)进行检查,但似乎不起作用(由于应许,我想)
// Add product to cart
router.post('/add', checkToken, (req, res) => {
let _idProduct = req.body._idProduct;
let quantity = req.body.quantity;
let exist = false;
Cart
.findOne({ user: req.decoded.userId })
.exec()
.then(cart => {
cart.items.map(item => {
// Product exist => add more quantity
if (item.product == _idProduct) {
item.quantity += quantity;
}
})
// How to check if no product with that id in Cart ??
cart.save(err => console.log(err));
res.json({
cart: cart
})
})
.catch(err => { console.log(err)});
})
购物车模型
var Cart = new mongoose.Schema({
user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
items: [
{
product: { type: mongoose.Schema.Types.ObjectId, ref: 'Product' },
quantity: { type: Number }
}
],
})
答案 0 :(得分:0)
您可以在此处使用布尔值/标志来查看是否找到了该项目。
cart.items.map(item => {
let found = false; // boolean to see if we found the item
// Product exist => add more quantity
if (item.product == _idProduct) {
item.quantity += quantity;
found = true; // if we find an existing item, set the flag to true
}
if (!found){ // if the item isn't found, we can add it to the cart.
// add item to cart
}
})
答案 1 :(得分:0)
此结构可能更有意义-您可以过滤cart.items
数组以查找匹配的产品,而不是使用map。如果有,增加数量。如果没有,请将其添加到数组或您需要执行的任何操作。
.then(cart => {
const existingItem = cart.items.filter(item => item.product == _idProduct)[0]
if(existingItem) existingItem.quantity += quantity
else {
//item does not exist, do what you need to do
}
cart.save(err => console.log(err));
res.json({
cart: cart
})
})