Question

Je l'ai rencontré plusieurs situations lors de l'utilisation MongoDB qui nécessitent l'utilisation de DBREFS. Cependant, je tiens aussi à mettre en cache certains champs du document référencé dans le DBRef lui-même.

{$ref:'user', $id:'10285102912A', username:'Soviut'}

Par exemple, je peut vouloir avoir le nom d'utilisateur même si le document utilisateur est référencé. Cela me fournir tous les avantages d'une approche de document unique; Plus vite l'interrogation et l'élimination de la nécessité de faire le déréférencement manuel dans mon code. Tout en même temps me permettant d'utiliser des références où ils ont du sens.

L'idée étant que lorsque le document de référence est mis à jour (un utilisateur change son nom, par exemple) ma couche métier peut mettre à jour automatiquement tous les documents qui y font référence.

En fin de compte, je me demande si elle est considérée comme bonne forme pour stocker des champs supplémentaires sur mes DBREFS? Est-il casser quoi que ce soit? Vais-je perdre mes données chaque fois qu'une référence est réécrite? Est-ce que les pilotes comme pymongo le soutenir?

Était-ce utile?

La solution

  

En fin de compte, je me demande si elle est considérée comme bonne forme pour stocker des champs supplémentaires sur mes DBREFS?

Il est peut-être plus propre d'avoir séparé « en cache » et champs « ref » ... cela dépend ce que l'un de vos données est.

  

Vais-je perdre mes données chaque fois qu'une référence est réécrite?

Vous pouvez, mais pas si vous faites attention. Si vous mettez à jour la base de données de la sous-objet, assurez-vous de mettre à jour les champs spécifiques que vous voulez mis à jour, pas tout écraser le sous-objet.

Souvenez-vous que les références qu'ils sont des objets tout à fait normal. La référence de base de données est une norme, pas un type spécial.

  

Les conducteurs comme pymongo soutiennent?

Les aides déréférencement du pilote toujours. Les aides font juste un findOne avec ref $ et $ les champs d'identification.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top