sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB:Dotazování na více kolekcí se dvěma dotazy?

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.



  1. MongoDB a MongoJS - nemohou spustit runCommand pro textové dotazy

  2. meteor nahrajte soubor do mongodb

  3. Mnoho aktualizací Mongodb

  4. Jak udržím has_many :through vztahy při serializaci do JSON a zpět v Rails 4.0.3?