定义
$sample从输入文档中随机选择指定数量的文档。
$sample阶段语法:{ $sample: { size: <positive integer N> } }N是随机选择的文档数量。 将N设置为大于或等于1的整数。
行为
如果以下所有条件都成立,则 $sample 将使用伪随机游标来选择 N 文档:
$sample是管道的第一个阶段。该集合包含 100 多个文档。
如果前面有任何条件是错误的,$sample:
读取之前的聚合阶段或集合扫描输出的所有文档。
如果在分片集群中使用 $sample,则每个分片都会独立执行采样操作。mongos 对每个分片的采样操作的合并结果进行采样,并返回所请求的文档数。
示例
以下示例使用 sample_mflix 示例数据集中的 movies 集合。有关如何将此数据集加载到部署中的详细信息,请参阅 加载示例数据集。
以下聚合操作从 movies 集合中随机选择 3 个文档:
db.movies.aggregate( [ { $sample: { size: 3 } }, { $project: { _id: 0, title: 1, year: 1, genres: 1 } } ])此操作会返回三个随机文档。
要使用MongoDB .NET/C# 驱动程序将 $sample 阶段添加到聚合管道,请对 PipelineDefinition 对象调用 UnionWith() 方法。
以下示例创建了一个管道阶段,该阶段从输入集合中返回五个随机文档:
var pipeline = new EmptyPipelineDefinition<Movie>() .Sample(5);要使用MongoDB Node.js驱动程序将 $sample 阶段添加到聚合管道,请在管道对象中使用 $sample操作符。
以下示例创建了一个管道阶段,该阶段从输入集合中返回五个随机文档。然后,该示例运行聚合管道:
const pipeline = [{ $sample: { size: 5 } }];
const cursor = collection.aggregate(pipeline);return cursor;