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

如何调整MongoDB查询以按UCODE获取最新交易记录?

需求:筛选指定记录,仅返回每个UCODE对应的最新交易记录

原始数据

_id                        ucode                         value           createDate
-------------------------------------------------------------------------------------
63a997ac1    08905ba5-4188-4f5f-b982-123456789012          10        2020-02-10 09:00:00
398fdd112    08905ba5-4188-4f5f-b982-123456789012         647        2020-02-11 09:00:00
561e4c033    1beced7e-b0ad-43e7-bd8d-d3c7cf2a1234          99        2020-02-12 10:00:00
63a997ac4    08905ba5-4188-4f5f-b982-xxxxxa3b0396          10        2020-02-13 09:00:00
398fdd115    08905ba5-4188-4f5f-b982-xxxxxa3b0396         777        2020-02-14 09:00:00
561e4c036    1beced7e-b0ad-43e7-bd8d-d3c7cf2axxxx         234        2020-02-15 10:00:00
63a997ac7    08905ba5-4188-4f5f-b982-906d2a3baaaa         610        2020-02-16 09:00:00
398fdd118    08905ba5-4188-4f5f-b982-906d2a3baaaa         647        2020-02-17 09:00:00
561e4c039    1beced7e-b0ad-43e7-bd8d-d3c7cf2axxxx         999        2020-02-18 10:00:00

现有聚合查询

db.transaction.aggregate([
    { $match:
        {ucode: {$in:[:listOfUcode]},
        createDate: {
            "$gte": ISODate(:start),
            "$lte": ISODate(:end)
                }              
        }
    },
    { $sort: { ucode: 1, createDate: -1 } },
])

期望结果

_id                        ucode                         value           createDate
-------------------------------------------------------------------------------------
398fdd112    08905ba5-4188-4f5f-b982-123456789012         647        2020-02-11 09:00:00
561e4c033    1beced7e-b0ad-43e7-bd8d-d3c7cf2a1234          99        2020-02-12 10:00:00
398fdd115    08905ba5-4188-4f5f-b982-xxxxxa3b0396         777        2020-02-14 09:00:00
398fdd118    08905ba5-4188-4f5f-b982-906d2a3baaaa         647        2020-02-17 09:00:00
561e4c039    1beced7e-b0ad-43e7-bd8d-d3c7cf2axxxx         999        2020-02-18 10:00:00

调整后的查询方案

在现有查询基础上新增分组和字段还原阶段,确保返回每组UCODE对应的完整最新交易记录:

db.transaction.aggregate([
    // 筛选指定UCODE和时间范围的记录
    { $match:
        {ucode: {$in:[:listOfUcode]},
        createDate: {
            "$gte": ISODate(:start),
            "$lte": ISODate(:end)
                }              
        }
    },
    // 按UCODE升序、创建时间降序排序,让每组最新记录排在首位
    { $sort: { ucode: 1, createDate: -1 } },
    // 按UCODE分组,提取每组第一条完整记录(即最新交易)
    { $group:{
        _id: "$ucode",
        latestTransaction: { $first: "$$ROOT" }
        }
    },
    // 将最新交易记录还原为原始文档结构
    { $replaceRoot: { newRoot: "$latestTransaction" } }
])

说明:原方案仅提取了日期和交易数量,无法得到完整的交易记录。上述调整通过$first: "$$ROOT"获取每组第一条完整文档,再用$replaceRoot恢复原始字段结构,与期望结果完全匹配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:10:32