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

MongoDB y Mongoose:matriz anidada de ID de referencia de documento

Con respecto a su primera pregunta:

Usted solicita específicamente una mejor manera de trabajar con identificadores de niños que están almacenados en el padre. Estoy bastante seguro de que no hay mejor manera de lidiar con esto, si tiene que ser este patrón.

Pero este problema también existe en las bases de datos relacionales. Si desea guardar su publicación en una base de datos relacional (usando ese patrón), también debe crear primero el comentario, obtener su ID y luego actualizar la publicación. De acuerdo, puede enviar todas estas tareas en una sola solicitud, lo que probablemente sea más eficiente que usar mongoose, pero el tipo de trabajo que debe realizarse es el mismo.

Con respecto a su segunda pregunta:

El beneficio sobre la variante A es que, por ejemplo, puede obtener la publicación y saber instantáneamente cuántos comentarios tiene, sin pedirle a mongodb que revise probablemente cientos de documentos.

La ventaja sobre la variante B es que puede almacenar más referencias a comentarios en un solo documento (una sola publicación), que total comentarios, debido al límite de tamaño de documento de 16 MB de mongos.

Sin embargo, la desventaja es la que mencionaste, que es ineficiente mantener esa estructura. Supongo que esto es solo un ejemplo para mostrar el escenario, así que esto es lo que haría:decidiría caso por caso qué usar.

  • Si el documento se leerá mucho y no se escribirá mucho, Y es poco probable que crezca más de 16 MB:incruste el subdocumento. de esta manera puedes obtener todos los datos en una sola consulta.

  • Si necesita hacer referencia al documento desde múltiples otros documentos Y sus datos realmente deben ser consistentes, entonces no tiene más remedio que hacer referencia a ellos.

  • Si necesita hacer referencia al documento desde múltiples otros documentos PERO la consistencia de los datos no es tan importante Y se aplican las restricciones del primer punto, luego incruste los subdocumentos y escriba el código para mantener la coherencia de sus datos.

  • Si necesita hacer referencia al documento desde múltiples otros documentos, y se escriben mucho, pero no se leen con tanta frecuencia, probablemente sea mejor hacer referencia a ellos, ya que esto es más fácil de codificar, porque no necesita escribir código para sincronizar datos duplicados.

En este caso específico (publicación/comentario) haciendo referencia al padre desde el niño (indicándole al niño que los padres _id ) es probablemente una buena idea, porque es más fácil de mantener que al revés, y el documento podría crecer más de 16 MB si se incrustaran directamente. Si estuviera seguro de que el documento NO tendría más de 16 MB, sería mejor incrustarlo, porque es más rápido consultar los datos de esa manera