Моделирането на добра схема на Mongodb наистина зависи от начина, по който осъществявате достъп до вашите данни. В описания случай ще индексирате своя ключ members.user_id, което изглежда добре. Но размерът на вашия документ ще нарасне, тъй като ще добавите зрители, редактори и администратори. Освен това вашата схема ще затрудни извършването на заявки като:
Заявка за проекти, където user_id xxx е редактор:
Отново, може би не е необходимо да правите заявки за проекти като този, така че вашата схема изглежда добре. Но ако трябва да направите заявка за проектите си чрез user_id И роля, бих ви препоръчал да създадете колекция „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})
Или още по-лесно... добавете индекс към схемата на вашия проект:
db.projects.ensureIndex({"memberships.role": 1})