mongoose更新数组并添加新元素

问题描述 投票:0回答:1

我很确定这个问题被问了很多项目,但是我找不到我的特定问题的答案,这看起来非常但我似乎无法让它工作。我有一个嵌入了购物车架构阵列的用户模型。我试图将一个对象添加到一个数组,如果它只存在更新数量和价格,如果它不添加到数组。我的代码会发生的事情是,当数组为空时它会添加一个新项目,它会更新项目的数量和价格,但它不想添加新项目。我读了一下回合,据我所知,我不能在一个请求中使用两种不同的db方法。我很感激任何帮助,这是我第一次真正使用mongooose。

const CartItem = require('../models/cartModel');
const User = require('../models/userModel');

exports.addToCart = (req, res) => {
  const cartItem = new CartItem.model(req.body);
  const user = new User.model();
    User.model
      .findById(req.params.id)
      .exec((err, docs) => {
        if (err) res.sendStatus(404);
        let cart = docs.cart;
        if (cart.length == 0) {
          docs.cart.push(cartItem);
        }
        let cart = docs.cart;
        let isInCart = cart.filter((item) => {
          console.log(item._id, req.body._id);
          if (item._id == req.body._id) {
            item.quantity += req.body.quantity;
            item.price += req.body.price;
            return true;
          }
        });
        if (isInCart) {
          console.log(cart.length)
        } else {
          cart.push(cartItem);
          console.log(false);
        }

        docs.save(function (err, docs) {
          if (err) return (err);
          res.json(docs);
        });
    });
 };

我实际上设法让它像这样工作

exports.addToCart = (req, res) => {
  const cartItem = new Cart.model(req.body);
  const user = new User.model();
    User.model
      .findById(req.params.id)
      .exec((err, docs) => {
        if (err) res.sendStatus(404);
        let cart = docs.cart;
        let isInCart = cart.some((item) => {
          console.log(item._id, req.body._id);
          if (item._id == req.body._id) {
            item.quantity += req.body.quantity;
            item.price += req.body.price;
            return true;
          }
        });

        if (!isInCart) {
          console.log(cart.length)
          cart.push(cartItem);
        }
        if (cart.length == 0) {
          cart.push(cartItem);
        }

        docs.save(function (err, docs) {
          if (err) return (err);
          res.json(docs);
        });
    });
};

不知道这是否是正确的方法,但我可以在我的数组中添加新产品并更新现有产品的值

arrays mongodb mongoose push
1个回答
0
投票

也许你的问题有一个更简单的解决方案:在mongoose documentation上查看这个页面:某些版本的mongoDB和mongoose存在兼容性问题,也许你需要编辑你的模型代码看起来像这样:

const mongoose = require("mongoose");

const CartSchema = new mongoose.Schema({
  //your code here
}, { usePushEach: true });

module.exports = mongoose.model("Cart", CartSchema);

您可以在这里找到更多信息:https://github.com/Automattic/mongoose/issues/5924

希望能帮助到你。

© www.soinside.com 2019 - 2024. All rights reserved.