MongoDB中如何让$filter仅返回数组字段的单个指定字段
MongoDB $filter过滤数组后仅返回元素指定单字段配置方法
$filter 操作符的作用仅为按照给定条件筛选数组成员,不会修改匹配到的数组元素本身的字段结构,因此无法直接通过配置$filter参数实现字段裁剪。要实现仅返回数组元素单个指定字段的需求,需要在$filter筛选逻辑外层嵌套$map数组操作符,对筛选后的结果集做二次投影,仅提取需要的目标字段。
实现示例
假设你需要从匹配status: "Received"的任务元素中,仅返回目标业务字段(可替换为你实际需要的字段名),修改后的视图创建代码如下:
db.createView( "vPendientes", "instancedb", [ { $project: { "Actividad" : { $map: { // 先传入$filter筛选后的符合条件的数组作为$map的输入 input: { $filter : { input : "$tasks", cond : { $eq: [ "$$this.status" , "Received"] } } }, // 仅提取指定字段作为新数组的元素 in: "$$this.需要返回的指定字段名" } }, // 其余顶层需要返回的字段可在此处按需添加配置 } } ] )
补充说明
- 如果后续需要返回匹配元素的多个指定字段,仅需修改
$map的in参数为自定义对象结构即可,示例:in: { taskId: "$$this._id", taskName: "$$this.taskName" } - 不要尝试在
$filter的cond条件中编写字段返回逻辑,cond仅负责判断元素是否满足筛选规则,不会控制最终返回的元素结构。
内容的提问来源于stack exchange,提问作者Daniel Sánchez
相关产品推荐
相关产品推荐

