優れたMongodbスキーマのモデリングは、データへのアクセス方法によって異なります。説明したケースでは、memberships.user_idキーにインデックスを付けます。これは問題ないようです。ただし、閲覧者、編集者、管理者を追加すると、ドキュメントのサイズは大きくなります。また、スキーマにより、次のようなクエリを作成することが困難になります。
user_id xxxがエディターであるプロジェクトのクエリ:
繰り返しますが、このようなプロジェクトをクエリする必要はないかもしれないので、スキーマは問題なく見えます。ただし、user_id ANDロールでプロジェクトをクエリする必要がある場合は、「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})