在 Mongoose 中,我有具有一对多关系的用户和角色模式。如何查询特定用户是否具有 'admin' 角色?
In Mongoose I have User and Role schemas that have a one to many relationship. How to query if a particular User has the 'admin' role?
我的 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 完成的。以下是我的 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();
这将获取用户详细信息和角色,其中 name
是 admin
。
您可以检查 user.roles
数组计数以确定用户是否具有管理员角色。
我的 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 完成的。以下是我的 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();
这将获取用户详细信息和角色,其中 name
是 admin
。
您可以检查 user.roles
数组计数以确定用户是否具有管理员角色。