如何通过查询子文档找到Mongoose文档?

时间:2016-01-03 11:01:10

标签: node.js mongodb mongoose

简而言之

我需要选择所有仪表板条目,当前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的所有信息中心条目。也就是说,当查询执行时,它应该返回前两个文档。

  • 5688fabea58caa0021c7d936
  • 5688fa7991d9574c13198060

1 个答案:

答案 0 :(得分:1)

您可以尝试此查询:

Dashboard.find(
   { members: { $elemMatch: { user: req.user, role: 'admin' } } }
)