2012-07-16 4 views
6

J'évalue actuellement mongodb pour un projet que j'ai commencé mais je ne peux trouver aucune information sur ce que serait l'équivalent d'une vue SQL dans mongodb. Ce dont j'ai besoin, qu'une vue SQL fournit, est de regrouper des données de différentes tables (collections) en une seule collection.Vue SQL dans mongodb

Je ne veux rien de plus que de regrouper certains documents et de les étiqueter comme un seul document. Voici un exemple:

Je les documents suivants: cc_address us_address billing_address shipping_address

Mais dans ma demande, je voudrais voir toutes mes adresses et être en mesure de les gérer en une seule document.

Dans d'autres cas, je peut simplement vouloir quelques champs de collections:

Je les documents suivants: fb_contact twitter_contact google_contact reddit_contact

chacun de ces documents ont des champs qui correspondent, comme prénom nom et adresse e-mail, mais ils ont aussi des champs qui ne sont pas alignés. J'aimerais pouvoir les compiler dans un seul document qui ne contient que les champs qui s'alignent.

Cela peut être accompli par Vues en SQL correct? Puis-je accomplir ce genre de fonctionnalité dans MongoDb?

Répondre

1

Les requêtes MongoDB ne couvrent jamais plus d'une collection car il n'existe aucun support pour les jointures. Ainsi, si vous avez besoin de données connexes dans les résultats d'une requête, vous devez ajouter ces données connexes à la collection que vous interrogez (c'est-à-dire dénormaliser vos données) ou créer une requête distincte pour une autre collection.

+1

Qu'en est-il de DBRefs? – netcoder

+1

DBRefs est juste la manière formalisée de stocker un '_id' étranger dans une collection qui peut être suivie d'une requête séparée pour le récupérer. – JohnnyHK

3

Il n'y a pas de "jointures" dans MongoDB. Comme dit par JonnyHK, vous pouvez soit énormaliser vos données ou vous utilisez des documents incorporés ou vous effectuez plusieurs requêtes

Cependant, vous pouvez également utiliser Map-Reduce. Si vous êtes prêt à utiliser la branche de développement, vous pouvez tester le nouveau aggregation framework mais peut-être que c'est trop? Ce nouveau framework sera dans le prochain numéro 2.2, prêt pour la production contrairement à 2.1.x.

Voici aussi le SQL-Mongo chart, qui peut vous aider dans votre apprentissage. Mise à jour: Selon votre réédition, vous n'avez pas besoin de Map-Reduce ou de la structure d'agrégation, car vous ne faites qu'interroger.

Vous effectuez essentiellement des jointures, interrogez plusieurs documents et fusionnez les résultats. L'endroit pour faire ceci est dans votre application du côté du client.

+0

Peut-être que je confonds mon propre problème ici. Je comprends que les jointures ne sont pas dans MongoDb, mais le cas d'utilisation auquel je pense ne nécessite pas nécessairement de jointures (je pense). J'ai mis à jour ma question avec un exemple de ce que je veux. – KenEucker

6

La question est déjà assez ancienne. Cependant, depuis mongodb v3.2, vous pouvez utiliser $lookup afin de joindre des données de différentes collections ensemble tant que les collections ne sont pas fermées. Depuis mongodb v3.4 vous pouvez également create read-only views.

+0

Merci pour la mise à jour! – KenEucker