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

采样率(聚合)

本页内容

  • 定义
  • 行为
  • 示例
$sampleRate

匹配一组随机输入文档。所选文档的数量大致等于总文档数量的样本率(百分比表示)。

语法$sampleRate运算符具有以下语法

{ $sampleRate: <non-negative float> }

选择过程使用均匀随机分布。样本率是一个介于0和1之间的浮点数(包含0和1),表示给定文档在通过管道时被选中的概率。

例如,样本率0.33大致会选择每三个文档中的一个。

此表达式

{ $match: { $sampleRate: 0.33 } }

等同于使用$rand运算符如下

{ $match: { $expr: { $lt: [ { $rand: {} }, 0.33 ] } } }

在相同的数据上重复运行会产生不同的结果,因为选择过程是非确定性的。一般来说,较小数据集在每次运行中选择的文档数量变化更大。随着集合大小的增加,选择的文档数量将接近均匀随机分布的预期值。

注意

如果需要从每次运行中获取确切的文档数量,应使用$sample运算符而不是$sampleRate

此代码创建了一个包含100个文档的小集合。

N = 100
bulk = db.collection.initializeUnorderedBulkOp()
for ( i = 0; i < N; i++) { bulk.insert( {_id: i, r: 0} ) }
bulk.execute()

$sampleRate运算符可以在管道中用来从集合中选择随机文档。在这个例子中,我们使用$sampleRate来选择大约三分之一的文档。

db.collection.aggregate(
[
{ $match: { $sampleRate: 0.33 } },
{ $count: "numMatches" }
]
)

这是在样本集合上运行5次的结果

{ "numMatches" : 38 }
{ "numMatches" : 36 }
{ "numMatches" : 29 }
{ "numMatches" : 29 }
{ "numMatches" : 28 }

提示

另请参阅

  • $sample

  • 随机数

返回

去除右边的空格

本页内容