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

MongoDB动态父级为未知国家代码时查询最新lastSalesDate的方法

实现方案

直接使用MongoDB聚合管道即可完成需求,核心是通过$objectToArray操作符处理动态的国家代码字段,无需提前知晓所有国家编码,完整实现逻辑如下:

  • 第一步:将文档中动态的国家字段转换为键值对数组,过滤掉_id、title等固定非国家字段
  • 第二步:拆分数组后每个元素对应单个国家的完整数据
  • 第三步:提取每个国家对应的lastSalesDate字段
  • 第四步:按日期降序排序后取第一条即为最新的销售日期记录

聚合查询示例代码如下:

db.collection.aggregate([
    // 匹配需要查询的目标文档,可按实际业务需求调整匹配条件
    {
        $match: {
            _id: ObjectId("5d82009cddf8d111b0f5c0f9")
        }
    },
    // 将整个文档转换为键值对数组并过滤非国家字段
    {
        $project: {
            countryFields: {
                $filter: {
                input: { $objectToArray: "$$ROOT" },
                cond: {
                    $not: {
                        $in: ["$$this.k", ["_id", "title"]]
                    }
                }
            }
        }
    },
    // 拆分国家字段数组
    { $unwind: "$countryFields" },
    // 提取需要的字段
    {
        $project: {
            countryCode: "$countryFields.k",
            lastSalesDate: "$countryFields.v.sales.lastSalesDate"
        }
    },
    // 按销售日期降序排序
    { $sort: { lastSalesDate: -1 } },
    // 取最新的一条记录
    { $limit: 1 }
])

如果需要对全表所有文档都执行该逻辑,去掉第一阶段的$match条件,再增加$group阶段按_id分组即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:24:03