【发布时间】:2017-10-23 11:19:26
【问题描述】:
我在 MongoDB 中有一个包含约 600,000 个文档的集合。其中,恰好一半的字段设置为 0,而其他字段的字段设置为 1。当我尝试使用聚合管道中的 sample 操作(通过 PyMongo)从该集合中获取随机样本时,它严重偏向 1 值。
在 25,000 条记录样本中,可能有 300-400 条记录的字段为 0,然后有 24,000 多条记录的字段为 1。
如果初始集合是均匀分布的,为什么使用$sample 返回的结果分布如此不同,我如何从集合中获得有代表性的样本?
这是我用于查询的 PyMongo 行:
cursor = foo_database.bar_collection.aggregate( [ { "$sample": { "size": 25000} } ])
【问题讨论】:
-
$sample是在服务端实现的,所以语言实现没有效果。除了size之外,没有其他参数选项,因此它非常像一个“黑匣子”,只是按照实现的方式运行。如果您希望它对于某些值“均匀分布”,那么您实际上需要“两个”或更多操作,对于您希望均匀分布的每个值一个。否则,它只是“随机”的,正如预期的那样。
标签: mongodb random aggregation-framework pymongo