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
            }
        ]
    }
]

现在我想列出我的应用程序中可用的所有角色,从用户集合开始。

我想到了一条SELECT DISTINCT rolename FROM ...SQL 语句。

我想得到类似的结果{"administrator","manager","monkey"}

  1. 是否可以?
  2. 我可以执行什么查询?我坚持:

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

    但这会找到所有用户,而不是所有角色。

  3. 好吗?还是创建另一个集合“角色”并保留一组 ObjectId 更好?

  4. 我正在使用 Mongoose(用于 nodejs 的 mongodb),所以我的查询必须为此做好准备。

4

1 回答 1

2

您可以使用distinct()命令查找唯一值:

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