MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB:Consultando várias coleções com duas consultas?


Tentar 'criar uma consulta "relacional"' no MongoDB será um exercício de frustração. Seu esquema armazena algumas informações (a classificação do post) em uma coleção e outras informações (a idade do autor) em uma coleção diferente, mas todas as consultas do MongoDB operam em coleções únicas. A menos que você desnormalize seus dados (o que você disse que não queria fazer), você precisará de um método de duas passagens para fazer isso funcionar.

Uma abordagem que deve funcionar seria construir uma matriz de IDs de autor e usá-la em uma consulta da coleção de postagens usando '$in'. Aqui está o que pode parecer em JavaScript usando o 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}});

A primeira linha cria um array vazio. A segunda linha cria um cursor que selecionará o _id campos de todos os autores em sua faixa etária de destino. A terceira linha usa o cursor para preencher uma matriz de autor _id s. A quarta linha exibe todas as postagens que correspondem aos seus critérios de destino:autor _id na lista que acabamos de construir e classificar no intervalo que você especificou.