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

如何从MongoDB嵌套嵌入式文档获取E6-2135航班各舱位baseFare

解决方案:提取航班E6-2135的舱位票价

方法一:直接返回完整舱位票价列表

无需$unwind,通过聚合管道精准筛选目标航班后提取票价数组即可:

db.yourCollectionName.aggregate([
  // 缩小处理范围,匹配包含目标航班的文档
  { $match: { "flights.flightId": "E6-2135" } },
  {
    $project: {
      _id: 0,
      flightFares: {
        // 从flights数组中筛选出目标航班,提取其fare属性
        $first: {
          $filter: {
            input: "$flights",
            cond: { $eq: ["$$this.flightId", "E6-2135"] }
          }
        }.fare
      }
    }
  }
])

执行结果:

{
  "flightFares": [
    { "travelClass": "Economy", "baseFare": 3988 },
    { "travelClass": "Business", "baseFare": 9999 }
  ]
}

方法二:每个舱位单独成文档

如果需要将每个舱位作为独立文档返回,可结合$unwind和$replaceRoot:

db.yourCollectionName.aggregate([
  { $match: { "flights.flightId": "E6-2135" } },
  {
    $project: {
      _id: 0,
      fares: {
        $first: {
          $filter: {
            input: "$flights",
            cond: { $eq: ["$$this.flightId", "E6-2135"] }
          }
        }.fare
      }
    }
  },
  { $unwind: "$fares" },
  { $replaceRoot: { newRoot: "$fares" } }
])

执行结果:

{ "travelClass": "Economy", "baseFare": 3988 }
{ "travelClass": "Business", "baseFare": 9999 }

关键说明

  • $filter用于精准定位目标航班,避免对整个flights数组$unwind带来的不必要性能消耗;
  • $first是因为每个文档中flightId唯一,筛选后只会得到单元素数组,直接提取即可;
  • 若集合中同一文档存在多个相同flightId的航班,可去掉$first,后续对筛选后的航班数组再做$unwind处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:17:14