2013-05-23 2 views
1

Question: Est-ce que j'inclus mes commentaires enfants dans un commentaire parent unique ou non?Commentaires imbriqués (enfants) dans un commentaire parent unique dans MongoDB

Vue d'ensemble:

  • Création système de commentaires

  • Les commentaires peuvent avoir des enfants

  • En ce moment, chaque enfant de commentaire ou d'un parent est stocké comme un enregistrement dans une collection appelée SubmissionCommentsSchema

  • Les commentaires enfants ont une clé => valeur de parent_id =>Object IDObject ID fait référence à un commentaire parent ayant un parent_id de null.

schéma ressemble:

SubmissionCommentsSchema = new Schema({ 
    id : Schema.ObjectId, 
    submission_id : { 
    type: String 
    }, 
    parent_id : { 
    type: String, 
    default: null 
    }, 
    comment : { 
    type: String, 
    required: true 
    }, 
    user_id: { 
    type: String, 
    required: true 
    }, 
    username : { 
    type: String, 
    required: true 
    }, 
    created : { 
    type: Date, 
    default: Date.now 
    }, 
    reply : { 
    type: Boolean, 
    default: false, 
    required: true 
    }, 
    deleted : { 
    type: Boolean, 
    default: false 
    } 
}); 

Exemple d'un commentaire parent:

{ submission_id: '51899313634afe0000000051', 
    comment: 'asdfadsf', 
    user_id: '516e173f48670b44d20004dc', 
    username: 'bobcobb', 
    _id: 51899338634afe0000000055, 
    deleted: false, 
    reply: false, 
    created: Tue May 07 2013 16:50:16 GMT-0700 (PDT), 
    parent_id: null }, 

Exemple d'un commentaire de l'enfant faisant référence au commentaire parent au-dessus:

{ submission_id: '51899313634afe0000000051', 
    comment: 'Testing one two four', 
    user_id: '516b45f8ac6a1b488e000001', 
    username: 'testing', 
    _id: 519d93a83867470000000146, 
    deleted: false, 
    reply: false, 
    created: Wed May 22 2013 20:57:28 GMT-0700 (PDT), 
    parent_id: '51899338634afe0000000055' }, 
  • En les servant à une vue, je les tire tous en arrière et les fais passer en boucle pour voir lesquels ont parent_id s! == null. Si c'est le cas, alors je mets ceux-ci dans une liste et les ajoute au commentaire parent, puis jette ceux dans la vue.

Dois-je simplement stocker les commentaires enfants dans le commentaire parent d'origine en tant que tableau imbriqué?

Répondre

2

Probablement pas puisque vous risquez de dépasser la limite de taille de document si un thread particulier reçoit plusieurs réponses. Ce que vous voudrez peut-être faire est d'ajouter un champ entier depth aux commentaires afin que vous puissiez facilement récupérer, par exemple, les 2 premiers niveaux, les afficher, puis charger les niveaux suivants uniquement lorsque l'utilisateur développe l'arbre des commentaires.

Parfois, il est également utile de conserver un tableau d'identifiants d'ancêtres afin de pouvoir extraire rapidement n'importe quel sous-arbre, ou un lien profond vers un commentaire spécifique peut rapidement déterminer quels commentaires vous devez charger 'au-dessus' l'arbre de commentaires minimalement développé qui l'inclut.

+0

Hmm intéressant. Est-ce que je devrais faire ceci même si elles vont être (seulement) niveau profond? Parent> enfant | enfant | enfant | enfant –

+0

S'ils ne sont JAMAIS d'un niveau profond alors vous n'avez pas besoin du tableau des ancêtres ou de la profondeur et si vous pouvez garantir qu'il n'y aura qu'un petit nombre, alors vous pouvez aller de l'avant et les intégrer, bien sûr. –

Questions connexes