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

Modelado de muchos a muchos:a través de Mongoid/MongoDB

Modelar un buen esquema de Mongodb realmente depende de cómo acceda a sus datos. En su caso descrito, indexará su clavememberships.user_id que parece estar bien. Pero el tamaño de su documento crecerá a medida que agregue lectores, editores y administradores. Además, su esquema dificultará la realización de consultas como:

Proyectos de consulta, donde user_id xxx es editor:

Una vez más, tal vez no necesite consultar proyectos como este, por lo que su esquema se ve bien. Pero si necesita consultar sus proyectos por user_id Y rol, le recomendaría crear una colección 'project_membership':

db.project_memberships.insert(
  { 
    "project_id" : ObjectId("4d730fcfcedc351d67000032"),
    "editors" : [
      ObjectId("4d730fcfcedc351d67000002"),
      ObjectId("4d730fcfcedc351d67000004")
    ],
    "viewers" : [
      ObjectId("4d730fcfcedc351d67000002"),
      ObjectId("4d730fcfcedc351d67000004"),
      ObjectId("4d730fcfcedc351d67000001"),
      ObjectId("4d730fcfcedc351d67000005")
    ],
    "administrator" : [
      ObjectId("4d730fcfcedc351d67000011"),
      ObjectId("4d730fcfcedc351d67000012")
    ]
  }
)

db.project_memberships.ensureIndex({"editors": 1})
db.project_memberships.ensureIndex({"viewers": 1})
db.project_memberships.ensureIndex({"administrator": 1})

O incluso más fácil... agregue un índice en el esquema de su proyecto:

db.projects.ensureIndex({"memberships.role": 1})