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

MongoDB聚合查询:仅返回嵌套数组中最后一条报价记录

解决方案

不需要多次$unwind,直接用数组操作符在聚合管道内处理即可,高效且避免数据膨胀。以下是实现逻辑:

  1. 先过滤并处理Extras数组:筛选出QuotationHistory非空的项,同时将每个符合条件的Extras的QuotationHistory仅保留最后一条记录
  2. 过滤掉处理后Extras为空数组的文档,只保留有有效数据的文档

具体聚合管道代码

db.collection.aggregate([
  {
    $addFields: {
      Extras: {
        $map: {
          input: {
            $filter: {
              input: "$Extras",
              cond: { $ne: ["$$this.QuotationHistory", []] }
            }
          },
          as: "validExtra",
          in: {
            $mergeObjects: [
              "$$validExtra",
              { QuotationHistory: { $slice: ["$$validExtra.QuotationHistory", -1] } }
            ]
          }
        }
      }
    }
  },
  {
    $match: {
      Extras: { $ne: [] }
    }
  }
])

步骤说明

  • $filter:遍历外层Extras数组,仅保留QuotationHistory不为空数组的项
  • $map:对筛选后的有效Extras项,用$mergeObjects保留原有字段,同时通过$slice: [数组, -1]截取QuotationHistory的最后一条记录
  • $match:过滤掉处理后Extras为空的文档,最终仅保留_id:1的目标文档

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:45:26