“文档” 菜单
文档首页
/
MongoDB Manual
/ / /

$sampleRate(聚合)

在此页面上

  • 定义
  • 行为
  • 举例
$sampleRate

匹配随机选择的输入文档。 所选文档的数量近似于以占文档总数的百分比表示的采样率。

$sampleRate 操作符的语法如下:

{ $sampleRate: <non-negative float> }

选择过程使用均匀随机分布。 采样率是一个介于 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" }
]
)

这是对样本collection运行 5 次的输出:

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

提示

另请参阅:

← $rtrim(聚合)

在此页面上