首页 > 解决方案 > MongoDB 数组在 Javascript 中未定义但存在于数据库中

问题描述

我正在尝试将 ObjectId 推送到另一个 Object 上的 ObjectId 数组中,但是在尝试推送到数组时,我保存对象的数组返回为未定义,即使它存在 JSON 转储:

在此处输入图像描述

 for (let i = 0; i < billedTimeEntries.length; i++) {
    const timeEntry = billedTimeEntries[i];
    const hourLog = await HourLog.find({ _id: timeEntry.hourLog });
    hourLog.timeEntries.push(timeEntry._id);

即使数组是在对象中定义的,.push 也会抛出“无法读取未定义的“推送”属性。

这个 ObjectId 数组的猫鼬模式如下所示:

  timeEntries: [{
    type: mongoose.Schema.ObjectId,
    ref: 'TimeEntry',
  }],

并且默认情况下看起来在数据库中定义为空数组。

标签: javascriptnode.jsmongodbmongoose

解决方案


HourLog.find返回Query查询不是承诺。使用Query#exec()方法从查询中获得承诺并await实现该承诺。此外,由于您要查找单个 HourLog 文档,因此应findOne使用find. 这将解决您的示例中的问题:

const hourLog = await HourLog.findOne({ _id: timeEntry.hourLog }).exec();

推荐阅读