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() 不是更新文档的函数的主要内容,如果未能解决你的问题,请参考以下文章
如何检查用户是不是能够在 marklogic 数据库中更新或插入文档?