如何从1000份文档的第400-500份中随机抽取50份?
正确实现方式说明
你的问题出在集合方法(skip/limit)和aggregate管道的执行逻辑不兼容——直接在集合后链式调用skip、limit,再调用aggregate时,aggregate会忽略前面的skip和limit,因为aggregate是独立的管道操作,不会继承游标上的筛选条件。
正确的做法是把skip、limit都放到聚合管道中,按顺序执行:
db.collation.aggregate([ { $skip: 400 }, // 先跳过前400条文档 { $limit: 100 }, // 取接下来的100条文档 { $sample: { size: 50 } } // 从这100条里随机抽取50条 ])
这个管道的执行流程是:
- 第一步通过
$skip跳过前400条数据 - 第二步通过
$limit获取后续的100条数据 - 最后通过
$sample从这100条数据里随机选取50条,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Tribe56123
相关产品推荐
相关产品推荐

