我创建了一个ETL,用于将数据从sybase传输到mongoDB环境。在一个地方,我要与旧版ID进行匹配,以便在模型中填充正确的mongo ObjectId。

这适用于我的前几千条记录,直到遇到缺少遗留ID的记录为止,在这种情况下,我会收到错误消息,因为模型需要一个objectId。在我的ETL文件中执行空检查不足以解决此问题。我还需要处理模型期望有效的objectId的事实。我该怎么做?

我相关的ETL代码如下所示:

let agency = await Agency.findOne({ agencyId: record.agent_house }).exec();


我像这样掉进去:

agency: {
   id: agency._id ? agency._id : null,
   // Other prop,
   // Other prop
 }


然后将数据移植到模型中,如下所示:

agency: {
  id: { type: mongoose.Schema.Types.ObjectId, ref: 'agencies' },
  // other prop,
  // other prop
 }


如何处理没有值的情况,即使在ETL文件中进行了空检查,该值也将导致objectId分配失败?

最佳答案

使用猫鼬的ObjectId类型,您可以执行以下操作:

agency: {
   id: agency._id ? agency._id : new mongoose.mongo.ObjectId(),
   // Other prop,
   // Other prop
 }

09-25 22:22