对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

$中位数(累加器运算符)

$median

7.0版本新增。

返回组中文档的中位数(第 50 百分位数)值的近似值。

$median 累加器可在以下阶段使用:

注意

消歧

本页介绍了 $median 用作 累加器 时的情况。累加器返回跨一组输入文档的聚合值。

您还可以在这些其他上下文中使用 $median:

{
$median: {
input: <number>,
method: <string>
}
}

$percentile 采用以下字段:

字段
类型
必要性
说明

input

表达式(expression)

必需

$percentile 计算此表达式返回的值的第 50 个百分位数。input 必须是计算结果为数字类型的表达式。如果表达式未评估为数值类型,则 $percentile 计算将忽略该值。

method

字符串

必需

mongod 用于计算第 50 个百分位数的方法。该方法必须是 'approximate'。

当作为累加器使用时,$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 } }
] )

在前面的管道中:

  • $match 2000 年到 2004 年之间发行并具有有效 IMDb 评分的动作片的过滤器。

  • $group 按 year 对文档进行分组,并使用 $median 计算每年所有动作电影的中位数 imdb.rating。

  • $sort 按年份升序对结果进行排序。

给本页内容打分