Memodelkan skema Mongodb yang baik sangat bergantung pada cara Anda mengakses data. Dalam kasus yang Anda jelaskan, Anda akan mengindeks kunci memberships.user_id Anda yang tampaknya ok. Tetapi ukuran dokumen Anda akan bertambah karena Anda akan menambahkan pemirsa, editor, dan administrator. Selain itu, skema Anda akan mempersulit pembuatan kueri seperti:
Proyek kueri, di mana user_id xxx adalah editor:
Sekali lagi, Anda mungkin tidak perlu menanyakan proyek seperti ini, sehingga skema Anda terlihat baik-baik saja. Tetapi jika Anda perlu menanyakan proyek Anda berdasarkan user_id DAN peran, saya sarankan Anda membuat koleksi '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})
Atau bahkan lebih mudah... tambahkan indeks pada skema proyek Anda:
db.projects.ensureIndex({"memberships.role": 1})