我正在为一个电子商务网站创建一个购物车,并决定在Mongodb中为用户存储购物车项目。我可以毫无问题地存储项目并在Mongodb中显示,但当我试图从单个项目中获取属性时,它说对象未定义。
这是购物车的架构
const cartSchema = new Schema(
{
email: {
type: String,
required: true,
},
cartItems: [
{
itemName: {
type: String,
required: true,
},
quantity: {
type: Number,
required: true,
},
itemPicture: {
type: String,
required: true,
},
},
],
},
{
timestamps: true,
}
字符串
但当我得到一个用户购物车和日志控制台,它看起来像这样
[
{
_id: new ObjectId("123_documentID_123"),
email: 'users_email',
cartItems: [ [Object] ],
createdAt: 2023-11-19T08:36:38.817Z,
updatedAt: 2023-11-19T08:36:38.817Z,
__v: 0
}
]
型
当我试图访问cartItems数组时,它告诉我对象未定义,但当我检查mongodb控制台时,数组中有我试图访问的cartItem
console.log(item.cartItems[0])
型
总是返回此错误
console.log(item.cartItems[0])
^
TypeError: Cannot read properties of undefined (reading '0')
型
这是同样的方式,我访问一个数组的项目在另一个模式,我有它的工作正常,唯一的区别是它的数组字符串不是对象。任何帮助是感激!
1条答案
按热度按时间chy5wohz1#
你的
item
是一个数组,所以我假设你使用Model.find()
来定位你的Cart
?当你执行
Model.find()
时,mongoose期望0个或更多的结果,所以总是会返回一个数组(空的或其他的)。要记录
cartItems[0]
,您需要执行以下操作:字符串
如果你知道你只是在寻找一个购物车,那么如果你有
Cart._id
值,就使用Cart.findById(id)
,或者如果你在查询另一个字段,就使用Cart.findOne({email: req.body.email})
。这两种方法都将返回一个文档,而不是一个数组。