MongoDB聚合查询:仅返回嵌套数组中最后一条报价记录
解决方案
不需要多次$unwind,直接用数组操作符在聚合管道内处理即可,高效且避免数据膨胀。以下是实现逻辑:
- 先过滤并处理
Extras数组:筛选出QuotationHistory非空的项,同时将每个符合条件的Extras的QuotationHistory仅保留最后一条记录 - 过滤掉处理后
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
相关产品推荐
相关产品推荐

