Het modelleren van een goed Mongodb-schema hangt echt af van hoe u toegang krijgt tot uw gegevens. In uw beschreven geval indexeert u uw memberships.user_id-sleutel die in orde lijkt. Maar uw documentgrootte zal groeien naarmate u kijkers, redacteuren en beheerders toevoegt. Uw schema maakt het ook moeilijk om vragen te stellen zoals:
Vraag projecten op, waarbij user_id xxx de editor is:
Nogmaals, het is misschien niet nodig om projecten als deze op te vragen, dus je schema ziet er goed uit. Maar als u uw projecten moet opvragen op user_id EN rol, raad ik u aan een 'project_membership'-verzameling te maken:
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})
Of nog eenvoudiger... voeg een index toe aan uw projectschema:
db.projects.ensureIndex({"memberships.role": 1})