首页 > 解决方案 > MongoDB - 使用字符串数组过滤器查询嵌套数组中的嵌套对象

问题描述

所以基本上我需要用我自己的过滤器过滤我的数据,它是字符串数组,但问题是,那个确切的字段是在 DB 数组中的嵌套对象内。所以,我的 Schema 的一部分看起来像这样:

members: [
    {
        _id: { type: Schema.Types.ObjectId, ref: "Users" },
        profilePicture: { type: String, required: true },
        profile: {
            firstName: { type: String },
            lastName: { type: String },
            occupation: { type: String },
            gender: { type: String }
        }
    }
]

我的过滤器看起来像这样

gender: ["male","female"]

这个过滤器的预期结果是得到一个既有男性用户又有女性用户的团队,如果它只有男性,或者只有女性,它不应该给我那个团队。但我所做的一切都给了我包括男性和女性在内的一切,即使只有男性成员。

我试过的:

db.teams.find(members: { $elemMatch: { "profile.gender": { $in: gender } } })

这仅在过滤器中指定了一种性别时才有效,而且我知道它不能对我想要实现的目标起作用,但我不知道如何实现它。任何帮助将不胜感激

编辑:我试图以这种方式做到这一点

db.teams.find({
    $and: [ 
        { members: { $elemMatch: { "profile.gender": gender[0] } } }, 
        { members: { $elemMatch: { "profile.gender": gender[1] } } } 
    ]
})

这仅在指定两个过滤器时才给我结果,但是,如果只有一个过滤器(“男性”或“女性”),它什么也没有给我。

标签: mongodbmongodb-query

解决方案


您可以使用运算符来执行此操作,该$all运算符查找数组字段包含所有指定元素的文档:

var gender = ['male', 'female'];
db.teams.find({'members.profile.gender': {$all: gender}});

推荐阅读