mongoose 无法从Mongodb文档中保存的对象数组中获取对象的属性

uxh89sit  于 2024-01-08  发布在  Go
关注(0)|答案(1)|浏览(233)

我正在为一个电子商务网站创建一个购物车,并决定在Mongodb中为用户存储购物车项目。我可以毫无问题地存储项目并在Mongodb中显示,但当我试图从单个项目中获取属性时,它说对象未定义。
这是购物车的架构

  1. const cartSchema = new Schema(
  2. {
  3. email: {
  4. type: String,
  5. required: true,
  6. },
  7. cartItems: [
  8. {
  9. itemName: {
  10. type: String,
  11. required: true,
  12. },
  13. quantity: {
  14. type: Number,
  15. required: true,
  16. },
  17. itemPicture: {
  18. type: String,
  19. required: true,
  20. },
  21. },
  22. ],
  23. },
  24. {
  25. timestamps: true,
  26. }

字符串
但当我得到一个用户购物车和日志控制台,它看起来像这样

  1. [
  2. {
  3. _id: new ObjectId("123_documentID_123"),
  4. email: 'users_email',
  5. cartItems: [ [Object] ],
  6. createdAt: 2023-11-19T08:36:38.817Z,
  7. updatedAt: 2023-11-19T08:36:38.817Z,
  8. __v: 0
  9. }
  10. ]


当我试图访问cartItems数组时,它告诉我对象未定义,但当我检查mongodb控制台时,数组中有我试图访问的cartItem

  1. console.log(item.cartItems[0])


总是返回此错误

  1. console.log(item.cartItems[0])
  2. ^
  3. TypeError: Cannot read properties of undefined (reading '0')


这是同样的方式,我访问一个数组的项目在另一个模式,我有它的工作正常,唯一的区别是它的数组字符串不是对象。任何帮助是感激!

chy5wohz

chy5wohz1#

你的item是一个数组,所以我假设你使用Model.find()来定位你的Cart
当你执行Model.find()时,mongoose期望0个或更多的结果,所以总是会返回一个数组(空的或其他的)。
要记录cartItems[0],您需要执行以下操作:

  1. console.log(item[0].cartItems[0]);

字符串
如果你知道你只是在寻找一个购物车,那么如果你有Cart._id值,就使用Cart.findById(id),或者如果你在查询另一个字段,就使用Cart.findOne({email: req.body.email})。这两种方法都将返回一个文档,而不是一个数组。

相关问题