Modelování dobrého schématu Mongodb skutečně závisí na tom, jak přistupujete ke svým datům. Ve vašem popsaném případě indexujete svůj klíč Members.user_id, který se zdá být v pořádku. Ale velikost vašeho dokumentu poroste, jak budete přidávat diváky, editory a správce. Vaše schéma také ztíží vytváření dotazů jako:
Projekty dotazů, kde user_id xxx je editor:
Opět možná nebudete muset dotazovat projekty, jako je tento, takže vaše schéma vypadá dobře. Pokud však potřebujete dotazovat své projekty podle role user_id AND, doporučil bych vám vytvořit kolekci '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})
Nebo ještě jednodušší... přidejte index do schématu projektu:
db.projects.ensureIndex({"memberships.role": 1})