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

$sample (聚合查询)

本页内容

  • 定义
  • 行为
  • 示例
$sample

从输入文档中随机选择指定数量的文档。

$sample 阶段语法

{ $sample: { size: <positive integer N> } }

N 是要随机选择的文档数。将 N 设置为一个大于或等于 1 的整数。

如果以下所有条件都为真,$sample 将使用伪随机游标选择 N 个文档

  • $sample 是管道的第一个阶段。

  • N 小于集合中总文档的 5%。

    注意

    您不能配置 $sample 用于确定何时扫描整个集合的阈值。阈值为 5%。如果大小大于集合中总文档数的 5%,则 $sample 执行top-k 排序,按照生成的随机值进行。如果样本文档大小超过 100MB,则 top-k 排序可能会溢出到磁盘。

  • 集合包含超过 100 个文档。

如果任何先前条件为假,$sample:

  • 读取来自先前聚合阶段或集合扫描的所有文档。

  • 执行随机排序以选择 N 个文档。随机排序受 排序内存限制 的约束。

    注意

    视图 是聚合管道的结果。当在视图中使用 $sample 时,MongoDB 将阶段追加到视图的聚合管道语法末尾。因此,视图上的 $sample 阶段永远不会是第一个阶段,并且始终导致集合扫描。

如果在 分片集群 中使用 $sample,则每个分片独立执行样本操作。 mongos 样本每个分片的样本操作合并结果,并返回请求的文档数。

本节展示了使用以下 users 集合的聚合管道示例

db.users.insertMany( [
{ _id : 1, name : "dave123", q1 : true, q2 : true },
{ _id : 2, name : "dave2", q1 : false, q2 : false },
{ _id : 3, name : "ahn", q1 : true, q2 : true },
{ _id : 4, name : "li", q1 : true, q2 : false },
{ _id : 5, name : "annT", q1 : false, q2 : true },
{ _id : 6, name : "li", q1 : true, q2 : true },
{ _id : 7, name : "ty", q1 : false, q2 : true }
] )

以下聚合操作从集合中随机选择 3 个文档

db.users.aggregate(
[ { $sample: { size: 3 } } ]
)

操作返回三个随机文档。

提示

另请参阅

返回

$replaceWith

本页内容