2016-06-24 8 views
0

TLDR;サブ文書やリレーショナルIDを使用する必要がありますか?MongoDB:サブ文書の使用

これは私のPostスキーマです:

const Post = new mongoose.Schema({ 
    title: { 
    type: String, 
    required: true 
    }, 
    body: { 
    type: String, 
    required: true 
    }, 
    comments: [Comment.schema] 
}) 

そして、これは私のCommentスキーマです:

const Comment = new mongoose.Schema({ 
    body: { 
    type: String, 
    required: true 
    } 
}) 

はPostgresのでは、私が代わりにコメントの配列を有するので、Commentpost_idフィールドを持っているでしょう内側はPostです。私はあなたがMongoDBで同じことをすることができると確信していますが、私はどちらがもっと従来のものかわかりません。人々がMongoDBの参照(およびテーブルへの結合)上のサブ文書を使用する場合、それはなぜですか?言い換えれば、サブ文書を使用する理由は何ですか?それが有利な場合は、Postgresでも同じことをする必要がありますか?

答えて

0

私はあなたの質問から理解して、それに基づいて答える。

sub documentsを保存する場合、comments specific to one postを知るために2つのテーブルを照会する必要はありません。

[{ 
    _id:1, 
    title:'some title', 
    comments:[ 
    { 
     ...//some fields that belongs to comments 
    } , 
    { 
     ...//some fields that belongs to comments 
    } , 
    ... 
    ] 
}, 
{ 
    _id:2, 
    title:'some title', 
    comments:[ 
    { 
     ...//some fields that belongs to comments 
    } , 
    { 
     ...//some fields that belongs to comments 
    } , 
    ... 
    ] 
}] 

今、あなたはpost(1)の_idに基づいて照会することができ、特定のポストに属しcomments arrayを得ることができます - :

は、我々はポストのためのDB構造を以下しているとしましょう。

comment's idをポストに入れておくだけなら、両方のテーブルにクエリを実行する必要がありますが、これは良い考えではありません。

EDIT: -

あなたはpost idcomments内部の記録を維持している場合、それはあなたがpost id、あなたに基づいてコメントテーブルを照会したい場合、すなわち投稿されたそのコメントを追跡するのに役立ちますコメント・レコードのフィールドのみが必要です。

どのような投稿にすべてのコメントが含まれているのかというユースケースがあります。投稿内にコメントを残すとコメントフィールドと投稿後のフィールドが表示されます。

これは、データ構造をどのように設計するかという要件に完全に依存します。

+0

"コメントのIDを投稿内に残しておけば、両方のテーブルをクエリする必要がありますが、これは良い考えではありません。"それはあなたがリレーショナルDBで常にやっていることじゃないの? MongoDBでも、 'populate()'を使って同じことができます。 –

+0

ああ、私の考え方は違うかもしれないと思いますか? 'Comment'の中に' post_id'フィールドを持つのが 'Post'の中にコメントの配列を持つよりも意味があるかどうかを尋ねています。 –

+0

あなたの要件に基づいています。あなたが頻繁に投稿テーブルまたはコメントテーブルを照会するかどうか。 – Shrabanee

関連する問題