使用 Mongoose,初始化已包含嵌入数据的新对象实例的正确方法是什么?

With Mongoose, what is the proper way to initalize a new object instance that already contains embedded data?

假设我有一些要保存的 API 数据。总共有 4 个模型相互引用,A > B > C > D,模式定义如下:

// Schemas

const A = new Schema({
  username: String,
  password: String,
  B: [B.schema],
});

const B = new Schema({
  name: String,
  C: C.schema,
});

const C = new Schema({
  a: [D.schema],
  b: [D.schema],
  c: [D.schema],
});


const D = new Schema({
  name: String,
});

我分别初始化 A 和 B,因为 A 仅为我的应用程序创建,而我在调用外部 API 后将 B 的实例保存到 A。但是,当我初始化 B 时,我已经拥有了 C 和 D 中我需要的所有数据(假设在获取数据时没有错误)。

因此,当初始化 B 的实例时,C 和 D 的已经嵌入的实例是否会自动初始化为我的 C 和 D 模型的实例,因为它们符合我定义模式的方式?或者我是否必须使用嵌套的 for 循环来单独初始化每个项目?

例如:

const apiResponse = {
 name: 'example',
 C: {
  a: [D, D, D],
  b: [D, D, D],
  c: [D, D, D]
 } 
}

// To initialize, do I option 1:
const newB = new db.B(apiResponse)

// Or do I do something like option 2:
const C = {};
for (key in apiResponse.C) {
 apiResponse.C[key].forEach(item => C[key].push(new db.D(item)));
}
const newC = new db.C(C);
const newB = new db.B({ name: apiResponse.name, C: newC })

所以我选择了如上所述的选项 1 (const newB = new db.B(apiResponse)),它似乎会自动初始化适合嵌入模式的对象中的所有内容。