2011-10-07 5 views
0

J'ai 2 collections sur 2 DB distincts. Les deux stockent un champ tableau. Je prévois d'interroger deux à la fois de sorte que:MongoDB: requête imbriquée avec des tableaux, et ses performances

Tous les documents de collecte 1 qui ont des éléments [A, B] dans leur gamme champ et leurs _ids sont présents dans le champ de tableau de collection 2 avec un _id document spécifique .

À titre d'exemple:

docs (collection 1, DB 1):

[{"_id":ObjectId("doc1"), "array1":["A","B"]}, {"_id":ObjectId("doc2"), "array1":["A","C"]}] 

User_Docs (collection 2, DB 2):

[{"_id":ObjectId("usr1"), "array2": [ObjectId("doc1"),ObjectId("foo")]}, {"_id":ObjectId("usr2"), "array2": [ObjectId("bar"),ObjectId("baz")]}] 

je besoin d'une requête celui donné A, B et usr1, renvoie l'objet 'doc1' (parce qu'il a A, B dans son champ array1 et usr1 l'a dans son champ array2).

Je peux évidemment aller chercher tous les documents ayant A, B dans une requête et tous les documents d'usr1 dans une autre requête et trouver les éléments communs au niveau de l'application, mais y at-il une meilleure façon de le faire en utilisant MongoDB?

Merci pour votre aide.

Répondre

0

Ok je ne suis pas sûr que je comprends exactement ce que vous essayez de faire à partir de votre description. Mais je ne comprends pas pourquoi vous interroger des données à travers db est juste ce qui me semble très lourd, pourquoi ne pouvez-vous pas stocker les deux ensembles de données dans le même DB. Vous pouvez toujours séparer plus tard si nécessaire? Je ne suis pas sûr que cela va résoudre votre problème vague, mais ce serait un bon point de départ.

Le meilleur de la chance.

0

Vous devrez interroger MongoDB deux fois, car vous n'avez aucune possibilité de jointure. Vous devrez le faire au niveau de l'application. Si vous pouvez dénormaliser, faites-le. Encaisser les données nécessaires dans un document intégré, de sorte que vous pouvez faire une seule requête.

Je pense @Eamonn a raison, que vous ne devriez pas avoir à faire une requête sur les DB.