Как использовать схемы подчиненных документов в Mongoose?

Пользователь

от margaret , в категории: JavaScript , год назад

Как использовать схемы подчиненных документов в Mongoose?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от lori_jast , год назад

@margaret 

Схемы подчиненных документов в Mongoose позволяют определять модели, которые будут использоваться в качестве поля другой модели. Это позволяет создавать глубоко вложенные структуры данных в MongoDB.


Для создания схемы подчиненных документов в Mongoose необходимо сначала определить отдельную схему для подчиненного документа. Для этого можно использовать метод mongoose.Schema. Например, чтобы определить схему для подчиненного документа, содержащего поля name и email, можно написать следующий код:

1
2
3
4
const subSchema = new mongoose.Schema({
  name: String,
  email: String
});


Затем можно определить основную схему, которая будет использовать подчиненную схему в качестве поля. Для этого можно использовать тип mongoose.Schema.Types.Embedded и указать в качестве значения схему для подчиненного документа. Например, чтобы определить схему, содержащую подчиненный документ с полями subDoc и createdAt, можно написать следующий код:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
const mainSchema = new mongoose.Schema({
  subDoc: {
    type: mongoose.Schema.Types.Embedded,
    ref: subSchema
  },
  createdAt: {
    type: Date,
    default: Date.now
  }
});


В данном примере поле subDoc будет содержать подчиненный документ, определенный в схеме subSchema. Поле createdAt будет содержать дату создания документа.


После определения схемы можно создавать и сохранять документы, используя методы модели Mongoose, например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
const SubDocModel = mongoose.model('SubDocModel', subSchema);
const MainModel = mongoose.model('MainModel', mainSchema);

const subDoc = new SubDocModel({
  name: 'John Doe',
  email: '[email protected]'
});

const mainDoc = new MainModel({
  subDoc: subDoc
});

mainDoc.save(function(err) {
  if (err) throw err;
  console.log('Main document saved successfully!');
});


В этом примере создается экземпляр модели SubDocModel, содержащий подчиненный документ, а затем создается экземпляр модели MainModel, содержащий подчиненный документ как поле subDoc. Затем основной документ сохраняется в базе данных MongoDB с помощью метода save.