定义
$median7.0版本新增。
返回组中文档的中位数(第 50 百分位数)值的近似值。
$median 累加器可在以下阶段使用:
注意
消歧
本页介绍了 $median 用作 累加器 时的情况。累加器返回跨一组输入文档的聚合值。
您还可以在这些其他上下文中使用 $median:
$median (expression), 返回单个文档内数组中值的中位数。$median (window function),在$setWindowFields阶段中使用,从窗口中的文档返回中位数值。
语法
{ $median: { input: <number>, method: <string> } }
命令字段
$percentile 采用以下字段:
字段 | 类型 | 必要性 | 说明 |
|---|---|---|---|
| 表达式(expression) | 必需 |
|
| 字符串 | 必需 |
|
行为
当作为累加器使用时,$median:
为组中的所有文档计算单独的结果。
使用 t-digest 算法计算近似百分位数。为了使用有限大小的数据结构计算中位数,必须进行近似处理。
计算注意事项
作为累加器使用时,$median 始终使用近似算法。因此,$median 在同一数据集上返回的计算出的百分位数在每次运行中可能会有所不同,这是由于 t-digest 近似算法中的伪随机性。此外,$median 可能会返回与真实统计中位数略有偏差的值。
例子
本页上的示例使用来自 sample_mflix 数据集的数据。有关如何将此数据集加载到您的自管理 MongoDB 部署中的详细信息,请参阅 加载示例数据集。如果您对示例数据库进行了任何修改,您可能需要删除并重新创建数据库,才能运行此页面上的示例。
以下示例使用 $median 计算从 2000 到 2004 每年操作电影的 IMDb rating 中位数:
db.movies.aggregate( [ { $match: { genres: "Action", year: { $gte: 2000, $lte: 2004 }, "imdb.rating": { $gt: 0 } } }, { $group: { _id: "$year", medianRating: { $median: { input: "$imdb.rating", method: "approximate" } } } }, { $sort: { _id: 1 } } ] )
在前面的管道中: