我正在为一个Electron 商务网站创建一个购物车,并决定在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
  }
]

当我try 访问cartItems数组时,它告诉我对象未定义,但当我判断MongoDB控制台时,数组中有我试图访问的cartItem

 console.log(item.cartItems[0])

始终返回此错误

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

TypeError: Cannot read properties of undefined (reading '0')

这与我在另一个模式中访问数组的项的方式相同,它工作得很好,唯一的区别是它是一个字符串数组,而不是对象.如有任何帮助,我们不胜感激!

推荐答案

你的item是一个数组,所以我假设你用Model.find()来定位你的Cart

当您执行Model.find()时,Mongoose期望0个或更多结果,因此将始终返回一个数组(空或其他).

要记录cartItems[0],您需要执行以下操作:

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

如果您知道您只在寻找一个购物车,那么如果您的值为Cart._id,则使用Cart.findById(id),如果您正在查询另一个字段,则使用Cart.findOne({email: req.body.email}).这两种方法都将返回单个文档,而不是array.

Node.js相关问答推荐

monorepo内的NPM包使用不在注册表中的本地包

FiRestore UPDATE方法引发错误:&Quot;错误:13内部:收到代码为1&Quot;的RST_STREAM

如何从谷歌云中部署的应用程序连接到mongoDB Atlas?

错误:无法为 /blog 收集页面数据并且在 object.fetch 处获取失败

错误:0308010C:try 通过 Github 推送部署到 firebase 托管时出现数字

每个数组值在 mongodb 中查找一个文档

如何通过node下载zip并直接解压zip?

如何在mongodb中获取对象数组内部的数据

Axios 响应循环通过函数只返回第一个映射对象的结果

fastify:流过早关闭

使用Typescript 时我应该避免循环导入吗?

[NodeJs 从 ADAL 升级到 MSAL]:无法在字符串上创建属性authenticationScheme

使用新react 18.0.0 的 create-react-app my-app redux 错误

响应发送 200 而不是 403

`npm install` 以Killed结尾

如何在 MongoDB collection.find() 上获取回调

我们如何或可以通过 npm 和 Meteor 使用 node 模块?

gyp WARN EACCES 用户root没有访问开发目录的权限

如何在express 中设置默认路径(路由前缀)?

为什么 Node.js 被命名为 Node.js?