如何在 MongoDB 中使用数组嵌套过滤器获取特定字段值?

How can I get specific field value with array nested filter in MongoDB?

过滤嵌套数组值后,我添加了“$project”查询以选择特定字段。

我想获取嵌套数组外的“new_yn”字段值,但我只获取了 id 和嵌套数组值。

如何修复我的查询?你能给我一些指导吗? (Mongo数据库版本为 5.0.6 社区)

[查询]

db.collection.aggregate([
  {
    $match: {
      "new_yn": "Y",
      "port_info": {
        $elemMatch: {
          "port_code": "http_https"
        }
      }
    }
  },
  {
    $project: {
      port_info: {
        $filter: {
          input: "$port_info",
          as: "item",
          cond: {
            $eq: [
              "$$item.port_code",
              "http_https"
            ]
          }
        }
      }
    }
  },
  {
    "$project": {
      "_id": 1,
      "new_yn": 1,
      "port_info.ip_port": 1
    }
  }
])

[Mongo游乐场]

https://mongoplayground.net/p/OXOaz8ct4KA

这是因为您没有将它包含在第一个 $project 阶段。

只需将 new_yn:1 添加到第一个项目阶段即可。

db.collection.aggregate([
  {
    $match: {
      "new_yn": "Y",
      "port_info": {
        $elemMatch: {
          "port_code": "http_https"
        }
      }
    }
  },
  {
    $project: {
      new_yn: 1,
      port_info: {
        $filter: {
          input: "$port_info",
          as: "item",
          cond: {
            $eq: [
              "$$item.port_code",
              "http_https"
            ]
          }
        }
      }
    }
  },
  {
    "$project": {
      "_id": 1,
      "new_yn": 1,
      "port_info.ip_port": 1
    }
  }
])

, you can use $set 一样,但它会带来该文档中的所有其他字段,我相信您不需要。