2013-08-16 6 views
2

Je suis assez nouveau avec NoSQL, MongoDB. Comment gérer la relation many-to-many entre 2 ou plusieurs collections/documents? nous ferions mieux d'utiliser DBRefs ou d'intégrer? En fait, j'ai déjà lu le manuel MongoDB, mais je n'ai pas trouvé quelque chose sur la relation many-to-many. J'ai manqué quelques points? ou il n'y a pas ce genre de relation dans MongoDB? THX!MongoDB, relation entre documents ou collections

+2

Ceci est une question très commune, Google recherche un peu vous obtiendrez 300 liens de lecture au moins; Mre que tout le monde peut fournir dans une seule réponse. Votre relation dépend trop fortement de vos données et de vos habitudes d'accès, en tant que telle cette question est trop vague dans son contexte actuel – Sammaye

+0

Vous avez raison, de nombreuses relations ne sont pas touchées par les documents mongodb. Si vous avez de telles relations dans votre modèle relationnel, cela changera probablement considérablement lors de l'utilisation d'une base de données non relationnelle. Pour obtenir de l'aide, vous devrez expliquer votre modèle. – citykid

+0

http://stackoverflow.com/questions/9475286/how-to-convert-many-to-many-relation-form-sql-to-mongodb-colllection – citykid

Répondre

3

Intégrer contre référence

C'est le problème de l'intégration par rapport référencement, et il est une source commune de confusion pour les nouveaux utilisateurs de MongoDB. Il existe une règle empirique simple qui fonctionne pour la plupart des scénarios de conception de schéma: Incorporer lorsque les objets enfants apparaissent toujours dans le contexte de leur parent. Sinon, stockez les objets enfants dans une collection séparée.

Intégrer ou référencer cela dépend de l'application. Supposons que vous construisiez une application simple dans MongoDB qui stocke les messages et les commentaires de blog.Si les commentaires apparaissent toujours dans un article de blog, et s'ils n'ont pas besoin d'être ordonnés de manière arbitraire (par date de publication, rang de commentaire, etc. on), puis l'intégration est très bien. Mais si, par exemple, vous voulez pouvoir afficher les commentaires les plus récents, quel que soit le post sur lequel ils apparaissent, alors vous voudrez faire référence. L'intégration peut fournir un léger avantage de performance, mais le référencement est beaucoup plus flexible.

Many-to-many

En SGBDR, vous utilisez une table de jointure pour représenter plusieurs à plusieurs relations; dans MongoDB, vous utilisez des clés de tableau. Par exemple, chaque produit contient un tableau d'ID de catégorie, et les produits et les catégories obtiennent leurs propres collections. Si vous avez deux documents de catégorie simples

{ _id: ObjectId("4d6574baa6b804ea563c132a"), 
title: "Epiphytes" 
} 

{ _id: ObjectId("4d6574baa6b804ea563c459d"), 
title: "Greenhouse flowers" 
} 

alors un produit appartenant aux deux catégories ressemblera à ceci:

{ _id: ObjectId("4d6574baa6b804ea563ca982"), 
name: "Dragon Orchid", 
category_ids: [ ObjectId("4d6574baa6b804ea563c132a"), 
ObjectId("4d6574baa6b804ea563c459d") ] 
} 
Questions connexes