0

次のようなスキーマを作成します。

[
    {
        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"}です。

  1. 出来ますか?
  2. どのクエリを実行できますか? 私は次のことを考えました:

    db.users.find({ "roles.rolename": { $exists : true }});

    ただし、すべてのロールではなく、すべてのユーザーが検索されます。

  3. いいですか?それとも、別のコレクション「ロール」を作成し、ObjectIds の配列を保持する方がよいでしょうか?

  4. 私は Mongoose (nodejs 用の mongodb) を使用しているため、クエリを準備する必要があります。

4

1 に答える 1

2

一意の値を見つけるには、 distinct()コマンドを使用できます。

> db.users.distinct('roles.rolename')
[ "administrator", "manager", "monkey" ]
于 2012-08-28T07:54:24.413 に答える