查询嵌入文档

时间:2012-08-28 07:17:26

标签: mongodb mongoose

我要创建一个这样的架构:

[
    {
        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. 好吗?或者更好地创建另一个集合“角色”并保留一个ObjectIds数组?

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

1 个答案:

答案 0 :(得分:2)

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

> db.users.distinct('roles.rolename')
[ "administrator", "manager", "monkey" ]