$percentile(百分位数累加器)
最后更新:2026-10-09
$percentile(百分位数累加器)
$percentile 是累加器,返回组内指定字段在给定百分位(0 到 100)上的值,自 MongoDB 7.0 起可用。p 参数可传单个值或数组,返回对应的一个或多个分位值。method 支持 approximate(默认,更快)与 exact。常用于性能监控的 p95、p99 和薪酬分位统计。
| 分类 | 累加器 |
|---|---|
| MongoDB 版本 | 7.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $group: { _id: <键>, pct: { $percentile: { input: "$字段", p: [ <百分位> ], method: "approximate" } } } }
返回值:组内指定百分位的值(传数组时返回数组)
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $percentile:每个服务的时延 p50、p95、p99
db.latency.aggregate([
{ $group: { _id: '$service', pct: { $percentile: { input: '$ms', p: [50, 95, 99], method: 'approximate' } } } }
])
运行结果:
{ "_id": "api", "pct": [12, 45, 80] }
📌 注意事项
- 需要 MongoDB 7.0 及以上版本
- p 必须在 0 到 100 之间
- 输入字段含非数值会被忽略
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Qp95 怎么算?
Ap 传 [95],返回该分位的值,常用于监控时延。
Qapproximate 误差大吗?
A对大数据集误差很小且速度快,适合监控场景;精确场景用 exact。
Q$percentile 和 $median 有什么区别?
A$median 固定第 50 百分位,$percentile 支持任意百分位。