对数组进行筛选

7/5/2023 MongoDB

若要在 MongoDB 聚合查询中使用 $project 阶段对数组字段进行筛选,你可以利用聚合表达式来处理数组。以下是一些常见的方法:

# 使用 $filter 操作符:

$filter 可以筛选数组中符合特定条件的元素,并返回一个新的数组,只包含满足条件的元素。

db.collection.aggregate([
  {
    $project: {
      _id: 0,
      filteredArray: {
        $filter: {
          input: "$arrayField", // 输入的数组字段
          as: "item",
          cond: { $gte: ["$$item", 5] } // 筛选条件,这里假设数组元素大于等于 5
        }
      }
    }
  }
])

在这个例子中,假设 arrayField 是一个数组字段,$filter 操作符被用来选择数组中大于等于 5 的元素,将它们放入 filteredArray 中。

# 使用$map操作符进行转换和筛选:

$map 操作符可以将数组的每个元素映射为新的值,你可以在 $map 中使用 $cond 条件表达式来进行筛选。

db.collection.aggregate([
  {
    $project: {
      _id: 0,
      filteredArray: {
        $map: {
          input: "$arrayField",
          as: "item",
          in: {
            $cond: {
              if: { $gte: ["$$item", 5] }, // 筛选条件,这里假设数组元素大于等于 5
              then: "$$item", // 如果满足条件,则输出元素本身
              else: "$$REMOVE" // 否则移除该元素
            }
          }
        }
      }
    }
  }
])

这个例子中,$map 操作符用来对数组中的每个元素应用条件筛选,如果元素大于等于 5,则输出元素本身,否则使用 $REMOVE 移除该元素。

# 注意事项:

  • 这些操作不会改变原始文档中的数组,而是在聚合管道中创建新的字段,包含经过筛选的数组结果。
  • 根据具体情况,你可能需要调整条件以及输出的数组字段名称。
    通过使用 $filter 或 $map 操作符,你可以在 MongoDB 的聚合查询中对数组字段进行筛选,并将筛选结果作为新的数组字段输出。