С Mon goose, как правильно инициализировать новый экземпляр объекта, который уже содержит внедренные данные? - PullRequest
0 голосов
/ 09 февраля 2020

Допустим, у меня есть некоторые данные, которые я получаю от 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 создается только для моего приложения, а я сохраняю экземпляр B в A после вызова внешнего API. Однако, когда я инициализирую 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 Ответ

0 голосов
/ 09 февраля 2020

Поэтому я выбрал вариант 1, как описано выше (const newB = new db.B(apiResponse)), и, похоже, он автоматически инициализирует все в объекте, который соответствует встроенным схемам.

...