Mongodb对$sample result运行查询

Mongodb对$sample result运行查询,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,在这种情况下,我需要从10000个随机文档中找出与某个查询匹配的文档数 Mongodb的$sample聚合似乎是获取随机文档的有效方法 db.users.aggregate( [ { $sample: { size: 3 } } ] ) 但是如何对返回的结果运行查询呢 我可以通过$sample获得随机ID,并使用$in对这些ID执行另一个查询,但我正在尝试了解是否有一种简单的方法 更新: 更多信息 除“_id”和“email”字段外,其他字段由用户定义,如customer.io中,您可以

在这种情况下,我需要从10000个随机文档中找出与某个查询匹配的文档数

Mongodb的$sample聚合似乎是获取随机文档的有效方法

db.users.aggregate(
   [ { $sample: { size: 3 } } ]
)
但是如何对返回的结果运行查询呢

我可以通过$sample获得随机ID,并使用$in对这些ID执行另一个查询,但我正在尝试了解是否有一种简单的方法

更新: 更多信息

除“_id”和“email”字段外,其他字段由用户定义,如customer.io中,您可以添加/删除其他属性

  person

  {
  _id: "..."
  email : "email@email.com"
  facebook: "facebook page url"
  ... and lot of other fields which may be present or not depending on the person



  }
查询也将由用户生成,但为了简单起见,我们假设: 随机选择10000个文档后我想运行

find({facebook: {$exists: true} }) 

在这些选定的文档上。

您应该添加一个
$match
语句

db.users.aggregate([ 
{ $sample: { size: 3 } },
{ $match: { facebook: {$exists : true} } },
{ $count: "nr_matches" }
])
请在此处阅读有关聚合的更多信息:

编辑: 甚至更短

db.users.aggregate([ 
{ $sample: { size: 3 } },
{ $group: { _id : {facebook : {$exists : true}}, count : {$sum: 1}}}
])

谢谢,但这会返回与查询匹配的随机文档。我想随机选择10000个文档,然后找出其中有多少与我想要的查询匹配。很好,我不明白$sample和$match的顺序有什么不同。谢谢你能从你的
用户
集合中添加一个示例文档吗?在
$sample
阶段后,你将要运行的查询?@felix添加了更多信息p.streef发布的答案实际上是正确的。首先使用
{$sample:{$size:10000}
获取10000个随机文档,然后使用
{$match:{facebook:{$exists:true}}
筛选这些文档