MongoDB查询:筛选数组字段包含输入数组所有元素的文档
解决方案
你需要使用MongoDB的$all数组查询操作符,直接在find()方法中使用即可,无需调用聚合管道。
实现代码
db.exercises.find({ muscleGroups: { $all: inputMuscleGroups } })
逻辑说明
$all操作符的作用是:要求查询字段(此处为muscleGroups)的数组值,必须包含$all后跟随的输入数组中的全部元素,元素顺序不影响匹配结果- 你之前使用的
$in操作符仅要求数组包含输入数组的任意一个元素即可匹配,因此不符合全包含的筛选需求
测试用例匹配验证
- 当
inputMuscleGroups = ["Abs"]时:所有文档的muscleGroups都包含Abs,返回全部3条文档,符合预期 - 当
inputMuscleGroups = ["Abs", "Biceps"]时:Push Ups、Pull Ups的数组同时包含两个元素,Sit Ups缺少Biceps被过滤,返回结果符合预期 - 当
inputMuscleGroups = ["Abs", "Shoulders", "Chest"]时:仅有Push Ups的数组包含全部三个元素,返回结果符合预期
内容的提问来源于stack exchange,提问作者bourkison
相关产品推荐
相关产品推荐

