{
"_id" : 1,
"country" : "us",
"source" : "ARIN",
"status" : "NEW",
"createdDate" : ISODate("2016-05-03T08:52:32.434Z")
},
{
"_id" : 2,
"country" : "us",
"source" : "ARIN",
"status" : "NEW",
"createdDate" : ISODate("2016-05-03T09:52:32.434Z")
},
{
"_id" : 3,
"country" : "cn",
"source" : "APNIC",
"status" : "NEW",
"createdDate" : ISODate("2016-05-03T10:52:32.434Z")
},
{
"_id" : 4,
"country" : "eu",
"source" : "RIPE",
"status" : "NEW",
"createdDate" : ISODate("2016-05-03T10:52:32.434Z")
},
当我们将其用于聚合时
{ $sample: { size: 3 } }
将返回3
个随机文档。
如何使用百分比。示例:{ $sample: { size: 50% } }
吗?
答案 0 :(得分:1)
您无法执行此操作,因为$sample
的表达式应为正数。
如果仍然需要使用$sample
,则可以尝试获取集合中文档的总数,获取一半的文档数量,然后运行$sample
:
1)计算集合( mongo Shell )中文档的数量:
var totalDocumentsCount = db.yourCollectionName.count()/2
print(totalDocumentsCount) // Replace it with console.log() in code
2)$sample
用于随机文档:
db.yourCollectionName.aggregate([{$sample : {size : totalDocumentsCount}}])
注意:
如果您想从集合中获取一半的文档(占文档的50%),那么$sample
可能不是一个好选择-它可能会导致查询效率低下。另外$sample
的结果可能会返回重复的文档(因此,实际上您可能无法获得50%的唯一文档)。尝试在此处详细了解:$sample
答案 1 :(得分:0)
如果有人在 PHP 中寻找此解决方案,请在最后(即在投影之前)根据需要在聚合中使用它,并避免使用限制和排序
[
'$sample' => [
'size' => 30
]
]