javascript - 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',
}],
并且默认情况下看起来在数据库中定义为空数组。
解决方案
HourLog.find
返回Query
,查询不是承诺。使用Query#exec()
方法从查询中获得承诺并await
实现该承诺。此外,由于您要查找单个 HourLog 文档,因此应findOne
使用find
. 这将解决您的示例中的问题:
const hourLog = await HourLog.findOne({ _id: timeEntry.hourLog }).exec();
推荐阅读
- java - java使用picocli格式化表格输出
- batch-file - 批处理文件以我想要的顺序一次打开多个文件夹
- python - AWS boto3 在 put_subscription_filter 中追加/删除参数
- terraform - 如何正确重置 Terraform 默认 tfstate?
- xamarin.forms - Xamarin-Forms:如何删除工具提示?
- python - 在 Django 项目中声明附加数据和模块的最佳方式
- python - 在 Python 中使用 Psycopg3 将 CSV 复制到 PostgreSQL 数据库
- python - 构建一个 1x10 数据框并用行向量填充它
- angular - 带角authgaurd的钥匙斗篷
- blockchain - Solidity 应该处理 Dapp 中的分页吗?