MongoDB数组在Javascript中未定义但在数据库中存在

时间:2018-07-16 22:26:18

标签: javascript node.js mongodb mongoose

我正在尝试将ObjectId推入另一个Object的ObjectId数组中,但是当试图推入该数组时,即使存在JSON转储,我的保存对象的数组也会以未定义的形式返回:

enter image description here

 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会抛出“无法读取未定义'push'的属性”,即使该数组是在对象中定义的。

此ObjectId数组的猫鼬模式如下:

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

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

1 个答案:

答案 0 :(得分:1)

HourLog.find返回Queryqueries are not promises。使用Query#exec()方法从查询中获取承诺,并在该承诺中使用await。此外,由于要查找单个HourLog文档,因此应使用findOne而不是find。这样可以解决您的示例中的问题:

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