简而言之
我需要选择所有仪表板条目,当前user
在我的mongo中具有角色admin
- mangoose
我的架构看起来像这样
var DashboardSchema = new Schema({
members: [new Schema({
user: {
type: Schema.ObjectId,
ref: 'User',
required: 'User cannot be empty'
},
role: {
type: String,
required: 'User role cannot be empty',
enum: ['admin', 'member'],
default: 'member'
}
})]
});
我的数据库集合看起来像这样。
{ "_id" : ObjectId("5688fa7991d9574c13198060"),
"members" : [
{ "user" : ObjectId("5688fa7991d9574c1319805f"), "role" : "admin" },
{ "user" : ObjectId("5688fa6591d9574c1319805c"), "role" : "member" }
]}
{ "_id" : ObjectId("5688fabea58caa0021c7d936"),
"members" : [
{ "user" : ObjectId("5688fa7991d9574c1319805f"), "role" : "admin"}
]}
{ "_id" : ObjectId("5688fa6591d9574c1319805d"),
"members" : [
{ "user" : ObjectId("5688fa6591d9574c1319805c"), "role" : "admin"},
{ "user" : ObjectId("5688fa7991d9574c1319805f"), "role" : "member"}
]}
尝试1
我写了这段代码,但它给出了错误
Dashboard.find({
'members': {$in: {role: 'admin', user: req.user}}
})
{“message”:“出了问题”}
尝试2
此代码生成值,但它为所有仪表板emtries提供至少一个member.role是admin,一个member.user是当前用户
Dashboard.find({
'members.role': {$in: 'admin'},
'members.user': {$in: req.user},
})
结果所有三个文件
我需要选择当前user
具有角色admin
的所有信息中心条目。也就是说,当查询执行时,它应该返回前两个文档。
答案 0 :(得分:1)
您可以尝试此查询:
Dashboard.find(
{ members: { $elemMatch: { user: req.user, role: 'admin' } } }
)