SQL转MongoDB查询 如何实现分组后按count倒序排序及分页
核心错误为$sort阶段被错误嵌套在$group的配置对象中,MongoDB聚合管道要求每个操作阶段都是数组内的独立顶层对象。
正确的查询代码
确保你的queries变量已经包含{test: '1'}的匹配条件,完整写法如下:
db.ip_table.aggregate([ // 对应SQL的 WHERE test = '1' 逻辑 { $match: queries }, // 对应SQL的 GROUP BY ip_address + COUNT(*) as count 逻辑 { $group: { _id: "$ip_address", count: {$sum: 1}, // 若需要返回原表其他字段,可在此处通过聚合操作符声明,例: // test: {$first: "$test"} } }, // 对应SQL的 ORDER BY count DESC 逻辑,必须作为独立阶段 { $sort: {"count": -1} } ]) // 对应SQL的 LIMIT $start, $limit 逻辑 .skip(start) .limit(limitQuery)
补充说明
你原SQL中的SELECT *在GROUP BY场景下不符合标准SQL规范,MongoDB分组后默认仅返回分组键_id和你显式声明的聚合字段,如果需要保留原表的其他字段,需要在$group阶段通过$first/$last/$push等聚合操作符指定取值规则。
内容的提问来源于stack exchange,提问作者developernode
相关产品推荐
相关产品推荐

