文档菜单
文档首页
/
MongoDB 手册
/ / /

$stdDevPop (聚合)

本页内容

  • 定义
  • 语法
  • 行为
  • 示例
$stdDevPop

变更版本5.0.

计算输入值的总体标准差。如果您想表示整个数据集,并且不希望对更大的数据集进行泛化,请使用此功能。$stdDevPop 忽略非数值值。

如果值仅代表数据集的一个样本,并从中泛化关于总体,请使用请使用 $stdDevSamp 代替。

$stdDevPop 在以下阶段可用:

当在 $bucket$bucketAuto$group$setWindowFields 阶段中使用时,$stdDevPop 具有如下语法

{ $stdDevPop: <expression> }

在其他支持的阶段中使用时,$stdDevPop 有两种语法之一

  • $stdDevPop 有一个指定的表达式作为其操作数

    { $stdDevPop: <expression> }
  • $stdDevPop 有一个指定表达式的列表作为其操作数

    { $stdDevPop: [ <expression1>, <expression2> ... ] }

$stdDevPop 的参数可以是任何 表达式,只要它解析为数组即可。

有关表达式的更多信息,请参阅 表达式运算符。

$stdDevPop 返回输入值的总体标准差,类型为 十进制

$stdDevPop 忽略非数值值。如果 $stdDevPop 的所有操作数都是非数值,则返回 null

如果样本只包含一个数值,则 $stdDevPop 返回 0

$group$setWindowFields 阶段,如果表达式解析为数组,则 $stdDevPop 将操作数视为非数值,并对计算无影响。

在其他支持的阶段

  • 如果操作数为单个表达式,且该表达式解析为数组,则 $stdDevPop 会遍历数组以操作数组的数值元素,并返回单个值。

  • 如果操作数为表达式列表,且其中任何表达式解析为数组,则 $stdDevPop 不会遍历数组,而是将数组视为非数值。

$setWindowFields阶段,具有值的窗口:

  • 忽略窗口中的非数值、null值和缺失字段。

  • 如果窗口为空,则返回null

  • 如果窗口包含NaN值,则返回null

  • 如果窗口包含Infinity值,则返回null

  • 如果上述任一条件都不成立,则返回一个double值。

创建一个名为 users 的集合,包含以下文档

db.users.insertMany( [
{ _id : 1, name : "dave123", quiz : 1, score : 85 },
{ _id : 2, name : "dave2", quiz : 1, score : 90 },
{ _id : 3, name : "ahn", quiz : 1, score : 71 },
{ _id : 4, name : "li", quiz : 2, score : 96 },
{ _id : 5, name : "annT", quiz : 2, score : 77 },
{ _id : 6, name : "ty", quiz : 2, score : 82 }
] )

以下示例计算每个测验的标准差

db.users.aggregate( [
{ $group: { _id: "$quiz", stdDev: { $stdDevPop: "$score" } } }
] )

该操作返回以下结果

{ "_id" : 2, "stdDev" : 8.04155872120988 }
{ "_id" : 1, "stdDev" : 8.04155872120988 }

创建一个名为 quizzes 的示例集合,包含以下文档

db.quizzes.insertMany( [
{
_id : 1,
scores : [
{ name : "dave123", score : 85 },
{ name : "dave2", score : 90 },
{ name : "ahn", score : 71 }
]
},
{
_id : 2,
scores : [
{ name : "li", quiz : 2, score : 96 },
{ name : "annT", score : 77 },
{ name : "ty", score : 82 }
]
}
] )

以下示例计算每个测验的标准差

db.quizzes.aggregate( [
{ $project: { stdDev: { $stdDevPop: "$scores.score" } } }
] )

该操作返回以下结果

{ _id : 1, stdDev : 8.04155872120988 }
{ _id : 2, stdDev : 8.04155872120988 }

新建版本5.0.

创建一个包含加利福尼亚州(CA)和华盛顿州(WA)蛋糕销售的 cakeSales 集合

db.cakeSales.insertMany( [
{ _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"),
state: "CA", price: 13, quantity: 120 },
{ _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"),
state: "WA", price: 14, quantity: 140 },
{ _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"),
state: "CA", price: 12, quantity: 145 },
{ _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"),
state: "WA", price: 13, quantity: 104 },
{ _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"),
state: "CA", price: 41, quantity: 162 },
{ _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"),
state: "WA", price: 43, quantity: 134 }
] )

此示例在 $stdDevPop 中使用 $setWindowFields 阶段以输出每个 state 的蛋糕销售 quantity 的总体标准差

db.cakeSales.aggregate( [
{
$setWindowFields: {
partitionBy: "$state",
sortBy: { orderDate: 1 },
output: {
stdDevPopQuantityForState: {
$stdDevPop: "$quantity",
window: {
documents: [ "unbounded", "current" ]
}
}
}
}
}
] )

在示例中

  • partitionBy: "$state" 分区 集合中的文档按 state。有 CAWA 的分区。

  • sortBy: { orderDate: 1 } 排序 每个分区中的文档按 orderDate 升序(1),因此最早的 orderDate 首先出现。

  • output 使用 $stdDevPopstdDevPopQuantityForState 字段设置为 quantity 人口标准差值,该操作在 文档 窗口中执行。

    窗口 包含从 无界 的下限到输出中的 当前 文档之间的文档。这意味着 $stdDevPop 返回从分区开始到当前文档之间的文档的 quantity 人口标准差值。

在这个示例输出中,CAWAquantity 人口标准差值显示在 stdDevPopQuantityForState 字段中

{ _id : 4, type : "strawberry", orderDate : ISODate("2019-05-18T16:09:01Z"),
state : "CA", price : 41, quantity : 162, stdDevPopQuantityForState : 0 }
{ _id : 0, type : "chocolate", orderDate : ISODate("2020-05-18T14:10:30Z"),
state : "CA", price : 13, quantity : 120, stdDevPopQuantityForState : 21 }
{ _id : 2, type : "vanilla", orderDate : ISODate("2021-01-11T06:31:15Z"),
state : "CA", price : 12, quantity : 145, stdDevPopQuantityForState : 17.249798710580816 }
{ _id : 5, type : "strawberry", orderDate : ISODate("2019-01-08T06:12:03Z"),
state : "WA", price : 43, quantity : 134, stdDevPopQuantityForState : 0 }
{ _id : 3, type : "vanilla", orderDate : ISODate("2020-02-08T13:13:23Z"),
state : "WA", price : 13, quantity : 104, stdDevPopQuantityForState : 15 }
{ _id : 1, type : "chocolate", orderDate : ISODate("2021-03-20T11:30:05Z"),
state : "WA", price : 14, quantity : 140, stdDevPopQuantityForState : 15.748015748023622 }

返回

$sqrt