sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB:¿Consultar múltiples colecciones con dos consultas?

Intentar 'crear una consulta "relacional" en MongoDB será un ejercicio de frustración. Su esquema almacena cierta información (la calificación de la publicación) en una colección y otra información (la edad del autor) en una colección diferente, pero todas las consultas de MongoDB operan en colecciones individuales. A menos que desnormalice sus datos (lo que dijo que no quería hacer), necesitará un método de dos pasos para que esto funcione.

Un enfoque que debería funcionar sería construir una matriz de ID de autor y usarla en una consulta de la colección de publicaciones usando '$in'. Así es como podría verse en JavaScript usando el 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 primera línea crea una matriz vacía. La segunda línea crea un cursor que seleccionará el _id campos de todos los autores en su rango de edad objetivo. La tercera línea usa el cursor para llenar una matriz de autor _id s. La cuarta línea muestra todas las publicaciones que coinciden con sus criterios objetivo:autor _id en la lista que acabamos de crear y calificar en el rango que especificó.