2017-02-17 6 views
4

2つの別々のモデルを作成して参照することと、スキーマ(サブ文書)を入れ子にすることの違いは何ですか?マングースネストされたスキーマとネストされたモデル

サブ文書:

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 - mongooseサブ文書とネストされたスキーマはまったく同じです。 しかし、ネストされたモデルはデータベースに別のコレクションを作成します。 私の質問は、ネストされたスキーマとネストされたモデルとのdiffrenceと、サブ文書とネストされたスキーマとの違いではありません。

+1

経由でそれらを参照。これは既に尋ねられているはずです... – Matt

+1

モングースの用語を使って質問を改善すると、 – Paul

答えて

4

サブ文書を使用する場合、実際には親文書内にデータのコピーがあり、すべての文書+サブ文書データを単一のクエリで取得できます。

「ネストされたモデル」を使用しているときは、実際にネストされていませんが、親モデルから子モデルを参照しています。この場合、populationを使用する必要があります。つまり、1つのクエリですべてのデータを取得することはできません。短いで

:サブ文書実際に巣データを、そしてあなたの「ネストされたモデルは、」唯一のq/aが直接、ちょうど埋め込まれたスキーマを別々のモデルには対応していませんだますそのID

関連する問題