Un user puede tener muchos projects (y un proyecto está asociado con un solo usuario). Este es un uno a muchos relación.
Cada user debe almacenar la lista de sus projects . Por ejemplo:
user:
id: <some value>,
name: <some value>,
email: <some value>,
projects: [
{ projectId: <some value>, projectName: <...>, projectDescription: <....>, otherInfo: { fld1: <...>, fld2: <...>, etc. } },
{ projectId: <some value>, projectName: <...>, projectDescription: <....>, otherInfo: { fld1: <...>, fld2: <...>, etc. } },
...
]
Tenga en cuenta que cada project es un subdocumento (objeto o documento incrustado) dentro de los projects formación. Un project tiene sus detalles relacionados como, projectId , projectName , etc.
Creo que debería haber solo una colección llamado como user_projects . Asumiendo que:(i) un user puede tener de 0 a 100 proyectos, y (ii) un project Los detalles de no son demasiado grandes.
Este es un modelo de incorporar el lado 'muchos' de la relación 1 a N en el lado 'uno'. Esta es una forma recomendada, desnormalizando los datos. Esto tiene la ventaja de consultas eficientes y rápidas. Esto simplifica las transacciones, ya que las escrituras (inserciones, actualizaciones y eliminaciones) serán atómicas con una sola operación en un documento dentro de la misma colección.
Estarás usando el user id o name (con un índice único) para recuperar un documento, y será una consulta muy rápida. Puede tener un índice en los projects matriz (los índices en los campos de la matriz se denominan Índices multiclave ) - en los campos del proyecto. Por ejemplo, índice en projectId o/y projectName tiene sentido.
Puede obtener todos los proyectos para un usuario:es una consulta simple usando el user id / name . Consulta proyección permite qué información relacionada con project se visualiza. Puedes usar un find o aggregate método para construir la consulta. Puede consultar un project específico para un user , usando el projectId o projectName . Dado que hay índices en user y project campos, esta será una consulta eficiente.
Entonces, mi recomendación es tener una sola colección, user_projects , con un user La información de y los projects información incrustada en él.