2017-02-17 5 views
4

В чем разница между схемой вложенности в схеме (поддокументами) и созданием двух отдельных моделей и ссылкой на них, что относительно их производительности?Вложенная схема Mongoose против вложенных моделей

:-документы

const postSchema = new Schema({ 
    title: String, 
    content: String 
}); 

const userSchema = new Schema({ 
    name: String, 
    posts: [postSchema] 
}); 

module.export = mongoose.model('User', userSchema); 

гнездовые модели (Заполнение по ссылке):

const postSchema = new Schema({ 
    title: String, 
    content: String, 
    author: { type: String, ref: 'User' } 
}); 
module.export = mongoose.model('Post', postSchema); 

const userSchema = new Schema({ 
    name: String, 
    posts: [{ type: Schema.Types.ObjectId, ref: 'Post'}] 
}); 
module.export = mongoose.model('User', userSchema); 

Edit: Это не дублирует вопрос.

В этом вопросе: Mongoose subdocuments vs nested schema - субдокументы mongoose и вложенная схема точно такие же. BUT Вложенные модели, создающие отдельную коллекцию в базе данных. Мой вопрос в том, что такое различие во вложенной схеме против вложенных моделей, а не вложенных документов против вложенной схемы.

+1

Это боян Q/непосредственно не касается моделей, раздельных только вложенной схемы. Это, должно быть, уже было задано, хотя ... – Matt

+1

Вы можете улучшить вопрос, используя терминологию Mongoose, т. Е. «Заполнение по ссылке», – Paul

ответ

4

При использовании поддокументов на самом деле у вас есть копия данных в родительском документе, позволяющая получить весь документ + данные субдокумента в одном запросе.

При использовании «вложенных моделей» вы на самом деле не вставляете их, а ссылаетесь на родительскую модель на дочернюю модель. В этом случае вы должны использовать population, что означает, что вы не можете получить все данные в одном запросе.

Короче: на самом деле гнездятся вложенные документы данных, и ваши «вложенные модели» только ссылки на них с помощью своего идентификатора

Смежные вопросы