Node.js 使用MongoDB和NodeJS更新阵列中的字段
我是后端新手,尝试用NodeJs和MongoDb制作购物车。 我尝试了很多方法,但无法更新产品的“数量”字段 这是模式Node.js 使用MongoDB和NodeJS更新阵列中的字段,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我是后端新手,尝试用NodeJs和MongoDb制作购物车。 我尝试了很多方法,但无法更新产品的“数量”字段 这是模式 const mongoose = require('mongoose'); const itemsSchema = mongoose.Schema( { prodId: String, name: String, price: Number, qty: { type: Number, default: 1,
const mongoose = require('mongoose');
const itemsSchema = mongoose.Schema(
{
prodId: String,
name: String,
price: Number,
qty: {
type: Number,
default: 1,
min: 1,
},
},
{
timestamps: true,
}
);
const cartSchema = mongoose.Schema(
{
total: {
type: Number,
},
products: [itemsSchema],
},
{
timestamps: true,
}
);
const Cart = mongoose.model('carts', cartSchema);
module.exports = Cart;
这是控制器
const Cart = require('../models/cart');
exports.postItemToCart = async (req, res) => {
const { prodId } = req.body;
Cart.updateOne(
{ 'products.prodId': prodId },
{ $inc: { 'products.qty': 1 } }
);
return res.status(200).send(Cart);
};
这是购物车
[
{
_id: '60062c7a9b0bfd350b3eb755',
__v: 3,
createdAt: '2021-01-19T00:48:58.006Z',
products: [
{
qty: 1,
_id: '6006333bd00fe96af648d308',
prodId: '1111',
name: 'Product One',
price: 24.22,
updatedAt: '2021-01-19T01:17:47.034Z',
createdAt: '2021-01-19T01:17:47.034Z',
},
{
qty: 1,
_id: '600634337f3eba6b451a26e5',
prodId: '2222',
name: 'Product Two',
price: 24.22,
createdAt: '2021-01-19T01:21:55.417Z',
updatedAt: '2021-01-19T01:21:55.417Z',
},
],
total: 48.44,
updatedAt: '2021-01-21T02:19:49.955Z',
},
];
我可以在Mongoose文档控制台中进行更改和更新,但不能在我的项目中应用相同的代码
请帮助:)
位置运算符将帮助您更新第一个匹配的数组元素
Cart.updateOne(
{ 'products.prodId': prodId },
{ $inc: { 'products.$.qty': 1 } } //note dollar sign
);
嗨,吉布斯!我试过了,但没用。我有此错误“(节点:6842)未处理PromisejectionWarning:TypeError[ERR_INVALID_ARG_TYPE]:第一个参数必须是string类型或Buffer、ArrayBuffer、Array或类似数组的对象的实例。在function.from(Buffer.js:331:9)处接收到函数模型[0]最后我终于解决了我的问题。我使用的是Mongoose的最新版本,我降级为“Mongoose”:“5.2.8”,现在我所有的问题都解决了!谢谢@gibbs!!