2017-02-17 560 views
4

模式中的嵌套模式(子文檔)與創建兩個單獨模型並引用它們之間的區別是什麼?它們的性能如何?Mongoose嵌套模式vs嵌套模型

子文檔:

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); 

編輯:這不是一個重複的問題。

在這個問題中:Mongoose subdocuments vs nested schema - 貓鼬子文檔和嵌套模式是完全一樣的。 但嵌套模型在數據庫中創建一個單獨的集合。 我的問題是什麼是嵌套架構vs嵌套模型差異,而不是子文檔vs嵌套架構。

+1

這欺騙Q/A並不直接針對單獨的模型,只是嵌入式架構中引用它們。這個問題已經被問過了...... – Matt

+1

您可以通過使用Mongoose術語來改善問題,即「通過引用填充」 – Paul

回答

4

使用子文檔時,您實際上擁有父文檔中的數據副本,可以讓您在單個查詢中獲取所有文檔+子文檔數據。

當使用「嵌套模型」時,你並不是真正地嵌套它們,而是從父模型引用到子模型。在這種情況下,您必須使用population,這意味着您無法在單個查詢中獲取所有數據。

總之:子文檔實際上窩中的數據,而你的「嵌套模式」只能通過自己的身份證