我要创建一个这样的架构:
[
{
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"}
等结果。
我可以执行哪些查询?我想了解:
db.users.find({“roles.rolename”:{$ exists:true}});
但是,这将找到所有用户,而不是所有角色。
好吗?或者更好地创建另一个集合“角色”并保留一个ObjectIds数组?
我使用的是Mongoose(mongodb用于nodejs)所以我的查询必须为此做好准备。
答案 0 :(得分:2)
您可以使用distinct()命令查找唯一值:
> db.users.distinct('roles.rolename')
[ "administrator", "manager", "monkey" ]