Pokus o „vytvoření „relačního“ dotazu v MongoDB bude cvičením ve frustraci. Vaše schéma ukládá některé informace (hodnocení příspěvku) do jedné kolekce a jiné informace (věk autora) do jiné kolekce, ale všechny dotazy MongoDB fungují na jednotlivých kolekcích. Pokud svá data nedenormalizujete (což jste řekli, že nechcete), budete k tomu potřebovat dvouprůchodovou metodu.
Přístup, který by měl fungovat, by bylo vytvořit pole ID autorů a použít je v dotazu na kolekci příspěvků pomocí '$in'. Zde je návod, jak by to mohlo vypadat v JavaScriptu pomocí mongo shell:
> 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}});
První řádek vytvoří prázdné pole. Druhý řádek vytvoří kurzor, který vybere _id
pole všech autorů ve vaší cílové věkové skupině. Třetí řádek používá kurzor k vyplnění pole autora _id
s. Čtvrtý řádek zobrazuje všechny příspěvky, které odpovídají vašim kritériím cíle:autor _id
v seznamu pouze sestavujeme a hodnotíme v rozsahu, který jste zadali.