mongodb - 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] } } }
]
})
这仅在指定两个过滤器时才给我结果,但是,如果只有一个过滤器(“男性”或“女性”),它什么也没有给我。
解决方案
您可以使用运算符来执行此操作,该$all
运算符查找数组字段包含所有指定元素的文档:
var gender = ['male', 'female'];
db.teams.find({'members.profile.gender': {$all: gender}});
推荐阅读
- google-cloud-storage - 在 kubernetes 运算符中访问 GOOGLE_APPLICATION_CREDENTIALS
- python-3.x - Dash 回调函数没有响应;错误:重复的回调输出
- javascript - 如何根据材质主题更改 mat-dialog-title 颜色?
- sql - Oracle/plsql Pivot - 在表格网格中聚合日期
- php - 我收到一个 PHP 错误,阻止我插入数据
- android - 有没有办法永久保存在 Android 应用中创建的 uuid?
- arrays - Julia,@view 以防止生成新数组
- javascript - 为什么默认参数在 javascript 中的函数内部是不可变的?
- ios - 每次新单元出现时如何访问 UITableView.visibleCells
- python - Plotly:如何使用类似于在图例中单击它们的按钮来切换轨迹?