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

Cómo hacer consultas anidadas en MongoDb que funcionan como consultas de selección Sql anidadas

La respuesta a tales preguntas en MongoDB a menudo es desnormalizar sus datos. Si solo necesita una lista de los usuarios en el grupo, puede almacenar el ID de usuario y el nombre de usuario en el documento de grupo. De alguna manera, estructura su base de datos de acuerdo con el resultado que desea ver en la pantalla en lugar de tratar de ponerlo en algún formato normalizado.

Claramente, eso solo funcionaría si su lista de grupos de usuarios (con nombres) pudiera caber en un solo documento, pero su enfoque actual también tiene algunas limitaciones con respecto al tamaño máximo de un grupo.

Otro enfoque sería almacenar los grupos a los que pertenece un usuario en una matriz en cada documento de 'Usuario'. Agregue un índice en ese campo de matriz y ahora puede encontrar usuarios por grupo. Dado que es probable que un usuario pertenezca a menos grupos que miembros en un grupo, este puede ser el mejor enfoque aquí.

db.user.save({_id:"u1", name:"u1 name", groups:[{_id:"g1", name:"Group One"}, ...]});

Nuevamente, puede almacenar el nombre del grupo con su _id para que pueda mostrar inmediatamente la lista de grupos a los que pertenece un usuario con un solo viaje de ida y vuelta. Por supuesto, si permite que cambie el nombre de un grupo, tendrá que iniciar una tarea en segundo plano para arreglar todas estas copias del nombre.

También usaría el generador de ID de MongoDB incorporado en lugar del suyo, tiene muchas propiedades deseables.