Mongodb对$ sample结果运行查询

时间:2017-06-22 05:50:59

标签: mongodb mongodb-query aggregation-framework

我需要在10000个随机文档中找到与特定查询匹配的文档数量。

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

db.users.aggregate(
   [ { $sample: { size: 3 } } ]
)

但是如何对返回的结果运行查询?

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

更新 更多信息

除了" _id"和"电子邮件"字段其他字段是用户定义的,例如在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} }) 

选择的文件。

1 个答案:

答案 0 :(得分:1)

您应该添加$match声明

db.users.aggregate([ 
{ $sample: { size: 3 } },
{ $match: { facebook: {$exists : true} } },
{ $count: "nr_matches" }
])

在此处详细了解聚合:https://docs.mongodb.com/manual/aggregation/

编辑: 甚至更短

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