$sample(聚合)

在本页面

  • 定义

  • 行为

定义

  • $sample

    • version 3.2 中的新内容。

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

$sample阶段具有以下语法:

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

行为

$sample使用两种方法之一来获取 N 个随机文档,具体取决于集合的大小,N 的大小以及$sample在管道中的位置。

如果满足以下所有条件,则$sample使用 pseudo-random 游标来选择文档:

  • $sample是管道的第一阶段

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

  • 该集合包含 100 多个文档

如果不满足上述任何条件,则$sample执行集合扫描,然后进行随机排序以选择 N 个文档。在这种情况下,$sample阶段受排序 memory 限制的约束。

警告
$sample可以在其结果集中多次输出同一文档。有关更多信息,请参阅光标隔离。

给定一个名为users的集合,其中包含以下文档:

{ "_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 } } ]
)

该操作返回三个随机文档。