You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB高级查询:如何筛选Element 2值为89的文档

MongoDB筛选Element 2对应值为89的文档解决方案

可以通过聚合管道先获取Element 2在header数组中的索引,再基于该索引匹配rows二维数组中的对应值,具体步骤如下:

完整聚合管道代码

db.yourCollectionName.aggregate([
  // 临时添加字段存储Element 2的索引
  {
    $addFields: {
      element2Index: {
        $indexOfArray: ["$header.name", "Element 2"]
      }
    }
  },
  // 筛选符合条件的文档
  {
    $match: {
      // 先排除header中没有Element 2的文档
      element2Index: { $ne: -1 },
      $expr: {
        // 判断rows中是否存在某一行的对应索引值为89
        $anyElementTrue: {
          $map: {
            input: "$rows",
            as: "row",
            in: { $eq: [{ $arrayElemAt: ["$$row", "$element2Index"] }, 89] }
          }
        }
      }
    }
  },
  // 移除临时字段,恢复原文档结构(可选)
  {
    $project: {
      element2Index: 0
    }
  }
])

代码解释

  • $addFields阶段:用$indexOfArray从$header.name数组中找到"Element 2"的位置索引,将结果存入临时字段element2Index;如果找不到Element 2,索引值为-1。
  • $match阶段:
    • 先过滤掉element2Index为-1的文档(即header中没有Element 2的文档);
    • 用$map遍历rows中的每一行,通过$arrayElemAt取出该行对应element2Index位置的值,判断是否等于89,生成一个布尔值数组;
    • $anyElementTrue检查布尔数组中是否存在true,只要有一行符合条件,该文档就会被保留。
  • $project阶段:可选步骤,移除临时添加的element2Index字段,让返回的文档结构与原结构一致。

注意事项

  • 将代码中的yourCollectionName替换为你的实际集合名称;
  • 如果确认所有文档的header中都包含Element 2,可以去掉element2Index: { $ne: -1 }这个过滤条件。

内容的提问来源于stack exchange,提问作者klestikokona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:35:21