MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB et Mongoose :tableau imbriqué d'ID de référence de document

Concernant votre première question :

Vous demandez spécifiquement une meilleure façon de travailler avec les identifiants enfants stockés dans le parent. Je suis presque sûr qu'il n'y a pas de meilleure façon de gérer cela, si ce doit être ce modèle.

Mais ce problème existe aussi dans les bases de données relationnelles. Si vous souhaitez enregistrer votre publication dans une base de données relationnelle (en utilisant ce modèle), vous devez également d'abord créer le commentaire, obtenir son ID, puis mettre à jour la publication. Certes, vous pouvez envoyer toutes ces tâches en une seule requête, ce qui est probablement plus efficace que d'utiliser la mangouste, mais le type de travail à effectuer est le même.

Concernant votre deuxième question :

L'avantage par rapport à la variante A est que vous pouvez par exemple obtenir le message et savoir instantanément combien de commentaires il contient, sans demander à mongodb de parcourir probablement des centaines de documents.

L'avantage par rapport à la variante B est que vous pouvez stocker plus de références aux commentaires dans un seul document (un seul message), que entier commentaires, à cause de mongos 16MB document-size-limit.

L'inconvénient est cependant celui que vous avez mentionné, à savoir qu'il est inefficace de maintenir cette structure. Je suppose que ce n'est qu'un exemple pour présenter le scénario, alors voici ce que je ferais :je déciderais au cas par cas ce qu'il faut utiliser.

  • Si le document sera beaucoup lu et peu écrit, ET il est peu probable qu'il dépasse 16 Mo :intégrez le sous-document. de cette façon, vous pouvez obtenir toutes les données en une seule requête.

  • Si vous devez référencer le document à partir de plusieurs autres documents ET vos données doivent vraiment être cohérentes, alors vous n'avez pas d'autre choix que de les référencer.

  • Si vous devez référencer le document à partir de plusieurs autres documents MAIS la cohérence des données n'est pas si importante ET les restrictions du premier point s'appliquent, puis intégrez les sous-documents et écrivez du code pour assurer la cohérence de vos données.

  • Si vous devez référencer le document à partir de plusieurs d'autres documents, et ils sont écrits dans beaucoup, mais pas lus souvent, vous feriez probablement mieux de les référencer, car c'est plus facile à coder, car vous n'avez pas besoin d'écrire de code pour synchroniser les données en double.

Dans ce cas précis (post/commentaire) faisant référence au parent de l'enfant (laissant l'enfant connaître les parents _id ) est probablement une bonne idée, car il est plus facile à gérer que l'inverse, et le document peut dépasser 16 Mo s'il est intégré directement. Si je savais avec certitude que le document ne dépasserait PAS 16 Mo, il serait préférable de les intégrer, car il est plus rapide d'interroger les données de cette façon