significa guardar información relacionada dentro del mismo documento. No es una regla general de MongoDB, sino una estrategia útil cuando los datos comparten ownership, ciclo de vida, acceso y cambios.
En este ejemplo, la orden contiene un snapshot del cliente y de los productos comprados. Esos datos se consultan con la orden y deben conservar el estado histórico de la venta.
El documento no queda visible con el item agregado y el total antiguo. Sin embargo, esto no garantiza que el cálculo sea correcto si el valor enviado por la aplicación es erróneo. Atomicidad protege indivisibilidad, no lógica de negocio.
También debe analizarse concurrencia. Dos clientes pueden añadir items al mismo documento sin perder necesariamente cambios si usan operadores atómicos, pero un patrón read-modify-replace puede sobrescribir actualizaciones.
Embedding puede mejorar localidad porque la información se recupera desde una sola unidad lógica. Esto reduce round trips y coordinación.
Sin embargo, “una query” no equivale automáticamente a “más rápido”. Un documento muy grande puede obligar a leer y transferir datos innecesarios. La proyección ayuda, pero el tamaño, cache y patrón de actualizaciones siguen importando.
Porque si el usuario edita o elimina su dirección después, la orden debe conservar dónde se entregó. La dirección embebida representa un hecho histórico, no una copia accidental del perfil.
Aun así, puede conservarse también una referencia opcional:
Que una pantalla muestre datos juntos no significa que tengan el mismo ownership o ciclo de vida. Puede resolverse con composición en backend, cache o una vista derivada.
Leer el documento, modificar un array en memoria y ejecutar replaceOne puede perder cambios concurrentes. Prefiere operadores atómicos o control de versión.
Embedding es una herramienta para representar una unidad coherente. Funciona bien cuando los datos comparten ownership, lifecycle, acceso y cambios, y cuando su crecimiento está controlado. El beneficio principal es localidad y atomicidad; los costes son crecimiento, duplicación, contention y menor independencia.
Comprueba lo aprendido
¿Por qué los items de una orden suelen ser buenos candidatos para embedding?
¿Qué diferencia existe entre un snapshot y un cached current value?
¿Qué señales indican que un array debería salir del documento?
¿Por qué la atomicidad por documento no garantiza que el total calculado sea correcto?
Diseña una estrategia para mostrar las cinco reviews recientes sin embeber millones de ellas.