定义
返回窗口中值的示例标准偏差。
注意
消歧
本页介绍了用作窗口函数的 $stdDevSamp。
您还可以在其他上下文中使用 $stdDevSamp:
$stdDevSamp (accumulator),它计算一群组文档值的示例标准偏差。$stdDevSamp (expression),计算大量中数值的样本示例差。
语法
{ $setWindowFields: { ... output: { <field>: { $stdDevSamp: <expression> } } } }
行为
结果类型
$stdDevSamp 以double形式返回输入值的示例标准差。
非数值和缺失值
$stdDevSamp窗口函数忽略非数值,包括缺失值。如果窗口不包含数值,则 $stdDevSamp 返回 null。
单值
如果窗口仅包含一个文档,则 $stdDevSamp 返回 null。
例子
本页上的示例使用 sample_mflix 数据集中的数据。有关如何将此数据集加载到自管理MongoDB 部署中的详细信息,请参阅加载样本数据集。如果对示例数据库进行了任何修改,则可能需要删除并重新创建数据库才能运行本页上的示例。
此示例使用 $setWindowFields 从 2009 和 2010 计算每部音乐剧电影的运行示例标准差字段。每个文档都会收到从其年度分区开始到当前文档计算得出的 $stdDevSamp 值。
db.movies.aggregate( [ { $match: { genres: "Musical", year: { $in: [ 2009, 2010 ] }, "imdb.rating": { $type: "double" } } }, { $setWindowFields: { partitionBy: "$year", sortBy: { title: 1 }, output: { stdDevSampRatingInYear: { $stdDevSamp: "$imdb.rating", window: { documents: [ "unbounded", "current" ] } }, rankInYear: { $documentNumber: {} } } } }, { $project: { _id: 0, title: 1, year: 1, "imdb.rating": 1, stdDevSampRatingInYear: 1, rankInYear: 1 } }, { $sort: { year: 1, title: 1 } } ] )
上述管道:
使用
$match从 2009 和 2010 中过滤具有 IMDb 数字评分的音乐剧电影。使用
$setWindowFields按year对电影进行分区,并按title进行排序。该阶段使用$stdDevSamp和文档窗口[ "unbounded", "current" ]为每个文档创建以下字段:stdDevSampRatingInYear:imdb.rating的运行示例标准差。rankInYear:由$documentNumber分配的每个分区的行号。
每个分区中的第一个文档在其窗口中只有一个值,因此
stdDevSampRatingInYear是null。每个后续文档都会向该窗口再添加一个值。使用
$project在输出中包含title、year、imdb、stdDevSampRatingInYear和rankInYear。使用
$sort按年份和标题对结果进行排序。