Quiero hacer una consulta eficiente en MongoDb para encontrar todos los usuarios que tienen sus userids listados en un grupo de usuarios. Idealmente, quiero hacer esto como una sola solicitud a Mongodb. Lo que deseo corresponde a selecciones anidadas en SQL. He intentado esto en la consola mongo:Cómo hacer consultas anidadas en MongoDb que funcionan como consultas de selección Sql anidadas
db.user.save({_id:"u1", Name:"u1 name"});
db.user.save({_id:"u2", Name:"u1 name"});
db.user.save({_id:"u3", Name:"u3 name"});
db.usergroup.save({_id:"g1", Users: ["u2","u3"]});
Ahora aquí es la de selección que quiero hacer, pero sin codificar el [ "U2", "U3"] matriz:
db.user.find({_id:{$in:["u2","u3"]}}).forEach(printjson);
Este funciona bien y devuelve los objetos de usuario para u2 y u3.
Ahora la pregunta es cómo obtener la matriz de ID de usuario en el operador $ in extraída con una consulta para que toda la consulta se pueda realizar con una única solicitud.
Una "consulta anidada" como esto no funciona:
db.user.find({_id:{$in:db.usergroup.find({_id:"g1"},{_id:0,Users:1})}}).forEach(printjson);
da este error: Mar Mar 27 de 6:17:41 excepción no detectada: error: { "$ err": "consulta no válida" , "código": 12580} no se pudo cargar: mongoNestedSelect.js
1) ¿es esto posible en mongodb y cómo?
2) ¿cómo hacer esto con el controlador C# oficial?
ok gracias. Entonces, ¿las "consultas anidadas reales" no son posibles en MongoDB ?. Y sí, estoy de acuerdo con su comentario sobre ObjectIds, pero acabo de utilizar cadenas en este ejemplo para mantener las cosas simples. – ssn
Correcto, sin consultas anidadas, sus datos deben estructurarse para que pueda obtener lo que desea con un único (o un número mínimo) de solicitudes a la base de datos. –