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

MongoDB多层嵌套文档数组查询:如何匹配logs元素topics首项指定值

MongoDB查询实现方案

该需求完全可以实现,通过MongoDB聚合管道即可完成,具体实现步骤和代码如下:

1. 核心查询逻辑说明

  • 预筛选阶段:仅保留logs数组中存在至少一个元素的topics数组第一个值等于目标值的文档,减少后续计算量
  • 数组过滤阶段:对符合条件的文档的logs数组做过滤,仅保留满足topics第一个值等于目标值的元素

2. 具体查询代码(以目标值为CCC为例)

db.collection.aggregate([
  // 预筛选符合条件的文档
  {
    $match: {
      "logs.topics.0": "CCC"
    }
  },
  // 过滤logs数组,仅保留符合要求的元素
  {
    $project: {
      _id: 1,
      hash: 1,
      logs: {
        $filter: {
          input: "$logs",
          as: "logItem",
          cond: {
            $eq: ["$$logItem.topics.0", "CCC"]
          }
        }
      }
    }
  }
])

3. 返回结果示例

基于你提供的样例数据,上述查询的返回结果如下:

{
    "_id": ObjectId("614e1b600146c86a7d5cb524"),
    "hash": "hash_1",
    "logs": [
        {
            "address": "address_2",
            "topics": [
                "CCC",
                "DDD"
            ]
        }
    ]
}

补充说明

如果你需要保留文档的其他全部字段,仅修改logs数组,可以把$project替换为$addFields,避免手动罗列所有需要保留的字段:

{
  $addFields: {
    logs: {
      $filter: {
        input: "$logs",
        as: "logItem",
        cond: {
          $eq: ["$$logItem.topics.0", "CCC"]
        }
      }
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:18:01