我正在尝试将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会抛出“无法读取未定义'push'的属性”,即使该数组是在对象中定义的。
此ObjectId数组的猫鼬模式如下:
timeEntries: [{
type: mongoose.Schema.ObjectId,
ref: 'TimeEntry',
}],
并且看起来默认情况下在数据库中被定义为空数组。
答案 0 :(得分:1)
HourLog.find
返回Query
和queries are not promises。使用Query#exec()
方法从查询中获取承诺,并在该承诺中使用await
。此外,由于要查找单个HourLog文档,因此应使用findOne
而不是find
。这样可以解决您的示例中的问题:
const hourLog = await HourLog.findOne({ _id: timeEntry.hourLog }).exec();