MongoDB $ sample的附加参数

时间:2017-03-29 05:18:16

标签: javascript node.js mongodb

我已成功使用Node.js中的db.collection('example').aggregate({$sample: {size: 1}})从我的集合中检索随机样本,但是,我想添加一个额外的参数来仅对某个项目进行采样子集。我尝试添加其他参数(例如,db.collection('example').aggregate({sampleParam: {$gte: 1}}, {$sample: {size: 1}}),但这不起作用。

我也明白.skip可以达到这个目的,但效率很低。

2 个答案:

答案 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的简单文档