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

问题描述

我的 Mongo 数据库中有两个集合:用户和角色。一个用户可以有多个角色。使用 Mongoose 我想找出特定用户(根据他们的 id)是否具有管理员角色。我如何执行该查询?在 sql 中,一种查找方法是编写此查询

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

但是我没有看到如何使用 Mongoose 完成等效查询。以下是我的猫鼬模式:

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)

解决方法

阅读 - https://mongoosejs.com/docs/populate.html#query-conditions

User.
  findById(id). // can also use find/findOne depending on your use-case
  populate({
    path: 'roles',match: { name: 'admin' }
  }).
  exec();

这将获取您的用户详细信息和角色,其中 nameadmin

您可以检查 user.roles 数组计数以了解用户是否具有管理员角色。