Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 在Mongoose中,我有一对多关系的用户和角色模式。如何查询特定用户是否具有';管理员';角色_Mongodb_Mongoose_Mongodb Query_One To Many_Mongoose Populate - Fatal编程技术网

Mongodb 在Mongoose中,我有一对多关系的用户和角色模式。如何查询特定用户是否具有';管理员';角色

Mongodb 在Mongoose中,我有一对多关系的用户和角色模式。如何查询特定用户是否具有';管理员';角色,mongodb,mongoose,mongodb-query,one-to-many,mongoose-populate,Mongodb,Mongoose,Mongodb Query,One To Many,Mongoose Populate,我的Mongo DB中有两个集合:用户和角色。一个用户可以有许多角色。使用Mongoose,我想了解特定用户(基于其id)是否具有管理员角色。如何执行该查询?在SQL中,一种查找方法是编写以下查询: SELECT * FROM Users INNER JOIN Roles ON Users.id = Roles.userID WHERE (Users.id = <some user id> AND Roles.name='admin') 读- 这将获取用户详细信息和角色,其中nam

我的Mongo DB中有两个集合:用户和角色。一个用户可以有许多角色。使用Mongoose,我想了解特定用户(基于其id)是否具有管理员角色。如何执行该查询?在SQL中,一种查找方法是编写以下查询:

SELECT *
FROM Users
INNER JOIN Roles ON Users.id = Roles.userID
WHERE (Users.id = <some user id> AND Roles.name='admin')
读-

这将获取用户详细信息和角色,其中
name
admin


您可以检查
用户。角色
数组计数以获取用户是否具有管理员角色。

谢谢!您的答案和附带的引用看起来很有希望,我明天会运行代码,如果它有效,我会将您的答案标记为正确答案。顺便说一句,我希望Mongoose doc Writer能够制作一个更好的索引——一个可以引导用户访问那些页面的索引,一个可以搜索“查询一对多关系”的索引。当然,保存的优势是stackoverflow,它似乎越来越像是一个可以找到合适文档的索引。再次感谢你的回答!
let RoleSchema = new Schema({
    name: String,
    owner: {
        type: Schema.Types.ObjectId,
        ref: "User"
    }
})
export let Role = mongoose.model("Role", RoleSchema)


let userSchema = new Schema({
    username: {
        type: String,
        unique: true,
        required: true,
        trim: true
    },
    roles: [
        {
            type: Schema.Types.ObjectId,
            ref: "Role"
        }
    ]
})
export let User = mongoose.model("User", userSchema)
User.
  findById(id). // can also use find/findOne depending on your use-case
  populate({
    path: 'roles',
    match: { name: 'admin' }
  }).
  exec();