MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB :Interroger plusieurs collections avec deux requêtes ?

Essayer de "créer une requête "relationnelle"" dans MongoDB va être un exercice frustrant. Votre schéma stocke certaines informations (la note de la publication) dans une collection et d'autres informations (l'âge de l'auteur) dans une autre collection, mais toutes les requêtes MongoDB fonctionnent sur des collections uniques. À moins que vous ne dénormalisiez vos données (ce que vous avez dit que vous ne vouliez pas faire), vous aurez besoin d'une méthode en deux passes pour que cela fonctionne.

Une approche qui devrait fonctionner consisterait à créer un tableau d'ID d'auteur et à l'utiliser dans une requête de la collection de publications à l'aide de '$in'. Voici à quoi cela pourrait ressembler en JavaScript en utilisant le shell mongo :

> var authorList = [];
> var authorCursor = db.authors.find({age:{$gt:19,$lt:25}},{"_id":1});
> while(authorCursor.hasNext()){authorList.push(authorCursor.next()["_id"])};
> db.posts.find({"author.$id":{$in:authorList},rating:{$gt:6,$lt:9}});

La première ligne crée un tableau vide. La deuxième ligne crée un curseur qui sélectionnera le _id champs de tous les auteurs dans votre tranche d'âge cible. La troisième ligne utilise le curseur pour remplir un tableau d'auteur _id s. La quatrième ligne affiche tous les articles qui correspondent à vos critères de ciblage :auteur _id dans la liste que nous venons de créer et d'évaluer dans la plage que vous avez spécifiée.