我已成功使用Node.js中的db.collection('example').aggregate({$sample: {size: 1}})
从我的集合中检索随机样本,但是,我想添加一个额外的参数来仅对某个项目进行采样子集。我尝试添加其他参数(例如,db.collection('example').aggregate({sampleParam: {$gte: 1}}, {$sample: {size: 1}})
,但这不起作用。
我也明白.skip
可以达到这个目的,但效率很低。
答案 0 :(得分:3)
在使用 $match
之前添加 $sample
阶段:
db.collection('example').aggregate([
{$match:
{sampleParam: {$gte: 1}}
},
{$sample: {size: 1}}
]);
答案 1 :(得分:0)
您的查询无法正常运行,因为sampleParam
不是pipeline stage
,您可以尝试这样做:
{ "_id" : 11, "score" : 11, "name" : "ahn", "q1" : true, "q2" : true }
{ "_id" : 12, "score" : 12, "name" : "dane", "q1" : true, "q2" : true }
{ "_id" : 13, "score" : 13, "name" : "spec", "q1" : true, "q2" : true }
{ "_id" : 14, "score" : 14, "name" : "axe", "q1" : true, "q2" : true }
{ "_id" : 15, "score" : 15, "name" : "soplo", "q1" : true, "q2" : true }
{ "_id" : 16, "score" : 16, "name" : "tepe", "q1" : true, "q2" : true }
我想我有一个用户集合,所以:
> db.user.aggregate([{$match:{score: {$gt:10}}}, {$sample:{size:1}}])
上面的查询会返回大于10的所有score
,并显示一个包含size
的简单文档