Il existe essentiellement deux scénarios :frais et périmé .
Données fraîches
Stocker des données en double est facile. Maintenir les données en double est la partie la plus difficile. La chose la plus simple à faire est donc d'éviter la maintenance, en ne stockant tout simplement pas de données en double pour commencer. Ceci est principalement utile si vous avez besoin de données fraîches . Stockez uniquement les références et interrogez les collections lorsque vous avez besoin de récupérer des informations.
Dans ce scénario, vous aurez des frais généraux en raison des requêtes supplémentaires. L'alternative consiste à suivre tous les emplacements des données en double et à mettre à jour toutes les instances à chaque mise à jour. Cela implique également des frais généraux, en particulier dans les relations N à M comme celle que vous avez mentionnée. Donc, de toute façon, vous allez avoir des frais généraux, si vous avez besoin de nouvelles données. Vous ne pouvez pas avoir le meilleur des deux mondes.
Données obsolètes
Si vous pouvez vous permettre d'avoir des données obsolètes, les choses deviennent beaucoup plus faciles. Pour éviter la surcharge des requêtes, vous pouvez stocker des données en double. Pour éviter d'avoir à conserver des données en double, vous n'allez pas stocker de données en double. Du moins pas activement .
Dans ce scénario, vous souhaiterez également stocker uniquement les références entre les documents. Utilisez ensuite une tâche de réduction de carte périodique pour générer les données en double. Vous pouvez ensuite interroger le résultat de réduction de carte unique, plutôt que des collections séparées. De cette façon, vous évitez la surcharge des requêtes, mais vous n'avez pas non plus à traquer les modifications de données.
Résumé
Stockez uniquement les références à d'autres documents. Si vous pouvez vous permettre des données obsolètes, utilisez des tâches périodiques de réduction de carte pour générer données en double. Évitez de maintenir données en double ; c'est complexe et source d'erreurs.