MongoDB est DBREF nécessaire?
À l'aide de la DBREF type de données dans MongoDB, un document peut ressembler comme indiqué ci-dessous. Mais avoir la $ref
champ de chaque ligne se sent redondant que chaque ligne montre bien la users
collection.
Est-il un moyen de faire référence à d'autres documents sans avoir quelque peu redondant $ref
-champ?
{
$id: {$oid : "4f4603820e25f4c515000001"},
title: "User group",
users: [
{_id: {$ref: "users", $id: { $oid: "4f44af6a024342300e000002"}}, isAdmin: true }
]
],
- est-il une raison précise pour laquelle vous n'êtes pas à l'aide de la simple Direct/Manuel de liens (il suffit de placer le ObjectId comme indiqué ci-dessous)?
Vous devez vous connecter pour publier un commentaire.
Dbref à mon avis, doit être évité lors de travaux avec mongodb, au moins si vous travaillez avec de grands systèmes qui nécessitent l'évolutivité.
Comme je sais que tous les pilotes de faire de nouvelle demande à la charge DBRef, il n'est donc pas 'rejoindre " au sein de la base de données, il est très coûteux.
Oui, garder les références dans l'esprit, de créer des conventions de nommage pour les " clés étrangères' (quelque chose comme RefUserId ou tout simplement UserId) et stocker l'id de document référencé. Charger les documents référencés-vous en cas de besoin. Aussi gardez vos yeux ouverts pour toute la dénormalisation, enrobage, vous pouvez le faire, parce que c'est généralement considérablement améliorer les performances.
Sauf si vous utilisez le pilote de méthodes spécifiques pour l'accès à
dbref
, il doit être inutile.Dans le cas où vous êtes à la gestion de la jointure manuellement (c'est à dire vous savez qui d'autres de la collection à "adhérer" à l'), le stockage juste de l'ObjectId est assez.
De la docs:
Manuel de références sont une alternative, et les docs disent manuel de références sont préférables à DBREFs (si je ne suis pas sûr de savoir pourquoi).
DBREFs sont utiles lorsque l'objet référencé vit dans une autre base de données ou d'où le nom de la collection autrement, ne serait pas évident.
Dénormalisation/embedding est préférable à n'importe quel type de liaison, car alors vous obtenez les mises à jour atomiques et n'avez pas besoin de re-requête pour les données associées.