cart.save() 不是更新文档的函数

Posted

技术标签:

【中文标题】cart.save() 不是更新文档的函数【英文标题】:cart.save() is not a function for updating a document 【发布时间】:2021-10-13 19:39:17 【问题描述】:

我正在创建一个电子商务应用程序,我目前正在使用 mongoDb 和 nodejs 中的编码处理购物车。我已经尝试了很多,但 cart.save() 不是一个函数错误正在引发。下面是我的 cartModel.js 从“猫鼬”导入猫鼬 常量 cartSchema = mongoose.Schema( 用户: 类型:mongoose.Schema.Types.ObjectId, 要求:真, 参考:“用户”, , 购物车项目:[ 名称:类型:字符串,必需:真, 数量:类型:数字,必填:真, 图片:类型:字符串,必需:真, 价格:类型:数字,必填:真, countInStock: type: Number, required: true , 产品: 类型:mongoose.Schema.Types.ObjectId, 要求:真, 参考:“产品”, , , ], , 时间戳:真, ) const cartModel = mongoose.model("Cart", cartSchema) 导出默认cartModel

cartController.js

export const addToCart = asyncHandler(async (req, res) => 
  const  cartItems  = req.body
  if (cartItems && cartItems.length === 0) 
    res.status(400)
    throw new Error("No item in the cart")
   else 
    const cart = await Cart.find( user: req.user._id )
    if (cart && cart.length !== 0) 
      cart.cartItems = [...cartItems]

      const updatedCart = await cart.save()
      res.status(201)
      res.json(updatedCart)
     else 
      const newCart = new Cart(
        user: req.user._id,
        cartItems,
      )
      const updatedCart = await newCart.save()
      res.status(201)
      res.json(updatedCart)
    
  
)

当我尝试使用以下对象更新它时


    "cartItems":[
        
            "name":"Ring",
            "qty":"1",
            "image":"ring-image",
            "price":"160",
            "countInStock": 5,
            "product": "60ff8222ce6dca3378449b93"
        ,
            "name":"Wallet",
            "qty":"2",
            "image":"wallet-image",
            "price":"40",
            "countInStock": 16,
            "product": "60ff8222ce6dca3378449b93"
        
    ]

它给我的错误是 cart.save() 不是一个函数。我不知道我做错了什么,因为 newCart.save() 运行良好,但是为什么 cart.save() 会引发错误?

【问题讨论】:

【参考方案1】:

错误是当我们使用 user._id 在购物车中查找时,它会返回一个数组,所以如果我们更改

const cart = await Cart.find( user: req.user._id )

const cart = (await Cart.find( user: req.user._id ))[0]

然后就可以正常使用了

【讨论】:

【参考方案2】:

find() 返回一个数组。您必须使用 findOne(),它返回一个文档。

    const cart = await Cart.findOne( user: req.user._id )
    await cart.save()

【讨论】:

以上是关于cart.save() 不是更新文档的函数的主要内容,如果未能解决你的问题,请参考以下文章

更新后是不是保留文档/收件箱?

您可以在 PyMongo 中更新的文档数量是不是有上限?

如何检查用户是不是能够在 marklogic 数据库中更新或插入文档?

单个休息“放置”端点是不是足以更新带有嵌套数组的文档?

如何根据数组是不是包含pymongo中的特定元素来更新所有文档?

如何在 onUpdate 函数中通过从同一集合中读取来更新同一文档