javascript - Mongoose 无法更新而是创建一个新数组
问题描述
即使没有遇到任何错误,我也无法更新我的收藏。有人可以帮忙吗?请我现在解决这个问题大约 3 个小时。
const product_id = req.body.cartItems.product_id;
const item = cart.cartItems.find(c => c.product_id == product_id);
if (item) {
Cart.findOneAndUpdate({ "user": req.user._id, "cartItems.product_id" : product_id }, {
"$set": {
"cartItems.$":{
...req.body.cartItems.quantity,
quantity: item.quantity + req.body.cartItems.quantity
}
}
})
.exec((error, _cart) => {
if (error) return res.status(400).json({ error });
if (_cart) {
return res.status(201).json({ _cart });
}
});
该模型:
const mongoose = require('mongoose');
const cartSchema = new mongoose.Schema({
user: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true},
cartItems: [
{
product_id: { type: mongoose.Schema.Types.ObjectId, ref: 'Product', required: true}, // This foreign key to product _id
quantity: {type: Number,required: true},
price: {type: Number, required: true}
}
]
}, {timestamps: true});
module.exports = mongoose.model('Cart', cartSchema);
解决方案
您需要使用 $[] 运算符来更新与您的过滤条件匹配的 cartItems 数组中的所有文档。此运算符的作用类似于数组中所有项目的占位符。考虑到您的编码,它将是这样的:
Cart.findOneAndUpdate({ "user": req.user._id, "cartItems.product_id" : product_id }, {
"$set": {
"cartItems.$[].quantity": item.quantity + req.body.cartItems.quantity
}
}).exec(...)
推荐阅读
- azure-communication-services - 在 Azure 通信服务英雄聊天应用程序中呈现 HTML 字符串
- c++ - 如何为古代操作系统编译 gcc?
- python - 可以在 env.step 中返回 False 以某种方式为 True 吗?(健身房)
- reactjs - MaterialUI:如何在网格项目内定位项目?
- colors - 如何用另一种颜色替换图像中的一种颜色?
- hybris - Hybris 业务流程轮询
- excel - 用 VBA Excel 编写的包含表单的代码,现在我想转换在 Web 上工作的逻辑?
- debian - debuild - 是否可以通过编译一个 Makefile 的 debuild 构建多个 debian 包
- r - R foreach 循环中的内存溢出,不需要在内存中存储任何内容
- python - Python:使用带有 tox 的 .env (dotenv) 文件