如何编写MongoDB查询查找单日产生3笔交易的客户详情
MongoDB查询:获取单日产生3笔交易的去重客户详情
关联规则
- ACCOUNT集合的
CID字段关联CUSTOMER集合的CID字段,一个客户可持有多个账户 - TRANSACTIONS集合的
ANO字段关联ACCOUNT集合的ANO字段,一个账户可产生多笔交易
实现逻辑
- 按交易所属账户+交易日期维度分组,统计每个账户每日的交易笔数
- 筛选出单日交易笔数等于3的账户记录
- 关联ACCOUNT集合,匹配账户对应的客户CID
- 关联CUSTOMER集合,匹配获取客户姓名信息
- 对客户CID做去重处理,避免同一客户多次满足条件时返回多条重复结果
完整查询语句
db.TRANSACTIONS.aggregate([ // 按账户+日期分组统计单日交易笔数 { $group: { _id: { ANO: "$ANO", // 提取日期格式化,忽略时间部分避免同一天不同时间被拆分统计 TDATE: { $dateToString: { format: "%Y-%m-%d", date: "$TDATE" } } }, transCount: { $sum: 1 } } }, // 筛选单日交易笔数等于3的记录 { $match: { transCount: 3 } }, // 关联ACCOUNT集合获取对应客户ID { $lookup: { from: "ACCOUNT", localField: "_id.ANO", foreignField: "ANO", as: "accountInfo" } }, { $unwind: "$accountInfo" }, // 关联CUSTOMER集合获取客户姓名,兼容ACCOUNT的数字CID和CUSTOMER的字符串CID格式差异 { $lookup: { from: "CUSTOMER", let: { cidNum: "$accountInfo.CID" }, pipeline: [ { $match: { $expr: { $eq: [ "$CID", { $concat: [ "C", { $toString: "$$cidNum" } ] } ] } } } ], as: "customerInfo" } }, { $unwind: "$customerInfo" }, // 按客户CID去重 { $group: { _id: "$customerInfo.CID", CNAME: { $first: "$customerInfo.CNAME" } } }, // 格式化输出字段 { $project: { _id: 0, CID: "$_id", CNAME: 1 } } ])
示例输出
基于你提供的测试数据,执行后输出结果如下:
{ "CID": "C1", "CNAME": "Mark" }
内容的提问来源于stack exchange,提问作者COURSE PRO
相关产品推荐
相关产品推荐

