寻求MongoDB开发专家协助:将指定MySQL查询转换为MongoDB语句
对应的MongoDB聚合查询
以下是实现你需求的MongoDB聚合管道语句:
db.table_name.aggregate([ // 过滤过去15分钟内的数据 { $match: { $expr: { $gte: [ "$column4", { $subtract: [new Date(), 15 * 60 * 1000] } // 15分钟转换为毫秒 ] } } }, // 按column4升序排序,保证后续拼接顺序正确 { $sort: { column4: 1 } }, // 按column_1、column_2分组,收集对应字段值 { $group: { _id: { column_1: "$column_1", column_2: "$column_2" }, data_1: { $push: "$column3" }, data_2: { $push: "$column5" } } }, // 调整输出字段结构,贴近MySQL查询结果格式 { $project: { _id: 0, column_1: "$_id.column_1", column_2: "$_id.column_2", data_1: 1, data_2: 1 } } ])
语句解析
- $match阶段:通过
$expr计算当前时间减去15分钟的时间戳,过滤出column4晚于该时间的文档,对应MySQL中的WHERE条件。 - $sort阶段:必须在分组前执行,因为
$push会保留文档进入分组阶段的顺序,这一步保证了data_1和data_2的元素严格按column4升序排列,对应MySQLgroup_concat里的ORDER BY column4 ASC。 - $group阶段:以
column_1和column_2作为分组键,用$push分别收集每组内的column3和column5值到数组中。 - $project阶段:将分组生成的
_id字段拆分为独立的column_1和column_2,并移除默认的_id字段,让输出结构更贴近原MySQL查询结果。
可选调整
如果需要将data_1和data_2从数组转为逗号分隔的字符串(完全匹配MySQLgroup_concat的默认行为),可以在$project阶段使用$join操作符(MongoDB 4.4及以上版本支持):
data_1: { $join: { input: "$data_1", separator: "," } }, data_2: { $join: { input: "$data_2", separator: "," } }
内容的提问来源于stack exchange,提问作者Karnish Master
相关产品推荐
相关产品推荐

