Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用MongoDB和NodeJS更新阵列中的字段_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 使用MongoDB和NodeJS更新阵列中的字段

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,

我是后端新手,尝试用NodeJs和MongoDb制作购物车。 我尝试了很多方法,但无法更新产品的“数量”字段

这是模式

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!!