我正在使用 $sample 查询进行 mongo 聚合。通过以下方式:
db.col.aggregate([
{$match: {topic: topic}},
{$sample: {'size': 10}}
{$project: {_id: 1}}
])
我的问题是,有没有办法设置采样的“种子”,以便每次运行此命令时都能得到相同的结果?
例如,在Python中我这样做:
import random
list_of_items = [...]
# set the seed to 0
random.seed(0)
# get sample
samples = random.sample(list_of_items, 10)
通过手动定义种子,我确保每次执行此操作的结果都是相同的。
目前不可能,但您可以通过 https://feedback.mongodb.com/请求此功能。
我们用于解决类似问题的解决方法之一是在
$out
之后使用 $sample
创建“快照”集合。然后,我们对“快照”集合进行处理,以执行具有可重现行为的实验。
我们获得的另一个优势是我们可以对“快照”集合执行索引,以根据需要加快实验速度。
在 mongodb 团队实现此功能之前,您可以采取解决方法。
您可以分配一个随机id [0; 1]到您的文档并按此 ID 对它们进行排序+限制。