次のようなスキーマを作成します。
[
{
username: "fabio",
password: "xxx",
roles: [
{
rolename: "administrator",
isVip: true
},
{
rolename: "manager",
isVip: true
}
]
},
{
username: "marco",
password: "yyy",
roles: [
{
rolename: "manager",
isVip: true
}
]
},
{
username: "pippo",
password: "...",
roles: [
{
rolename: "monkey",
isVip: false
}
]
}
]
ここで、users コレクションから始めて、アプリで使用できるすべてのロールを一覧表示したいと思います。
SELECT DISTINCT rolename FROM ...
SQL文について考えます。
のような結果を得たい{"administrator","manager","monkey"}
です。
- 出来ますか?
どのクエリを実行できますか? 私は次のことを考えました:
db.users.find({ "roles.rolename": { $exists : true }});
ただし、すべてのロールではなく、すべてのユーザーが検索されます。
いいですか?それとも、別のコレクション「ロール」を作成し、ObjectIds の配列を保持する方がよいでしょうか?
私は Mongoose (nodejs 用の mongodb) を使用しているため、クエリを準備する必要があります。