我需要在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} })
选择的文件。
答案 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}}}
])