Est-il possible d'avoir une relation entre objet dans une base de données MongoDB?
J'utilise MongoDB au travail ces jours-ci. Jusqu'à présent, je le trouve d'une grande expérience.
Cependant, je suis invité à établir des relations entre les collections avec MongoDB. Cela va à l'encontre de l'objet de la NoSQL concept pour moi, mais pour être un bon vieux noob dans ce domaine, j'en suis venu à demander d'autres avis.
Par exemple, si nous prenons la commune sur le Rôle, la relation entre l'Utilisateur, est-il possible d'avoir une collection de référence nommé "Rôles" et d'attribuer une référence d'un point à un Utilisateur?
J'ai commencé à réfléchir à la création d'un objet qui fournit un IDENTIFIANT de l'objet demandé, mais il se sent comme quelque chose que je ne devrait pas avoir à faire avec le NoSQL.
Donc il y a des gens ici qui ont été demander de faire la même chose? Avez-vous réussir et comment?
source d'informationauteur lollancf37 | 2011-08-09
Vous devez vous connecter pour publier un commentaire.
MongoDB (et la plupart des autres bases de données NoSQL) ne supporte pas nativement le concept de relations. Sgbdr ont de requête native d'outils pour définir et utiliser les relations (les Jointures, par exemple) que MongoDB manque.
Cela ne signifie pas que vous ne pouvez pas définir des relations et des références dans les bases de données NoSQL. Cela signifie simplement il n'y a pas de requête native des opérateurs qui sont liés au courant.
Il y a trois façons différentes de "référer" à un document à partir d'un autre dans MongoDB :
Stocker les visées du document IDENTIFIANT (généralement un ObjectId) comme un champ dans le document de référence. C'est la meilleure approche si votre app, vous permettra de savoir dans quelle collection il doit chercher à les visées du document.
Example : {_id: ObjectId(...); userId: ObjectId(...) <- reference).
La deuxième approche est l'aide de l'DBRef convention qui définit une référence à un document de façon formelle :
{ $ref : <collname>, $id : <idvalue>[, $db : <dbname>] }
. Dans presque tous les cas, la première approche est préférable, mais DBRef autorise les références du document l'application peut ne pas connaître le type ou l'emplacement d'. Plus d'informations ici : http://www.mongodb.org/display/DOCS/Database+Références#DatabaseReferences-DBRef et une bonne lecture sur le moment de les utiliser ici : http://valyagolev.net/article/mongo_dbref/N'est techniquement pas une référence, mais dans beaucoup de cas, il est logique d'intégrer tout ou partie des documents dans d'autres documents. Notez que la normalisation de votre schéma doit être de moins d'un foyer avec des bases de données NoSQL.
Example : {_id: ObjectId(...); user: {_id: ObjectId(...), name:"Willy Wonka"}}
.Tout ce que dit, vous pouvez utiliser un complètement schéma normalisé dans MongoDB et la plupart des ORM bibliothèques à faire beaucoup de travail pour vous qui n'est pas natif de MongoDB. Dans la plupart des cas, cela signifie que vous seriez mieux avec un SGBDR traditionnels. Si vous êtes à la commutation de MongoDB parce que vous pensez que c'est un fast version de MySQL que vous avez été mal informé. Les deux ont fonctionnelle sweetspots avec seulement un chevauchement limité. Si votre application s'appuie fortement sur relationnelle de la fonctionnalité ne pas utiliser de NoSQL.
D'autres articles de la lecture vaut la peine de vous lever à la vitesse sur la non-relationnelle de la pensée :
http://www.mongodb.org/display/DOCS/Schema+Design
Je voudrais faire comme ceci:
Que vous êtes de vous répéter, n'est pas un problème à l'intérieur d'un NoSQL structure. La normalisation n'est pas la meilleure solution pour elle.
Alternativement, vous pouvez tout simplement mettre le $_id de chaque membre dans la rubrique "Utilisateurs" de la matrice et ont les utilisateurs avec leurs noms, prénoms, téléphone,... dans une autre collection. Une autre option est de stocker des documents dans les "Utilisateurs" de la matrice, mais cela peut avoir lourd à gérer.