使用 $sample 聚合
Aggregation using $sample
通过使用 { $sample: { size: 3 } }
的聚合,我将返回 3
个随机文档。
如何使用所有文档的百分比来代替?
看起来像 { $sample: { size: 50% } }
的东西?
你不能这样做,因为 $sample
的表达式应该是正数。
如果您仍然需要使用 $sample
您可以尝试获取集合中文档的总数,获取其中的一半然后 运行 $sample
:
1) 计算集合中的 no.of 个文档 (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
如果有人在 PHP 中寻找此解决方案,请在最后(即投影之前)根据需要在聚合中使用它,并避免使用限制和排序
[
'$sample' => [
'size' => 30
]
]
从 Mongo 4.4
开始,您可以使用 $sampleRate
运算符:
// { x: 1 }
// { x: 2 }
// { x: 3 }
// { x: 4 }
// { x: 5 }
// { x: 6 }
db.collection.aggregate([ { $match: { $sampleRate: 0.33 } } ])
// { x: 3 }
// { x: 5 }
这与随机选择的输入文档相匹配 (33%)。所选文档的数量近似于采样率,表示为文档总数的百分比。
请注意,这相当于为每个文档添加一个介于 0 和 1 之间的随机数,如果该随机值低于 0.33,则过滤它们。这样你可能会在输出中得到或多或少的文档,运行这几次不一定会给你相同的输出。
通过使用 { $sample: { size: 3 } }
的聚合,我将返回 3
个随机文档。
如何使用所有文档的百分比来代替?
看起来像 { $sample: { size: 50% } }
的东西?
你不能这样做,因为 $sample
的表达式应该是正数。
如果您仍然需要使用 $sample
您可以尝试获取集合中文档的总数,获取其中的一半然后 运行 $sample
:
1) 计算集合中的 no.of 个文档 (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
如果有人在 PHP 中寻找此解决方案,请在最后(即投影之前)根据需要在聚合中使用它,并避免使用限制和排序
[
'$sample' => [
'size' => 30
]
]
从 Mongo 4.4
开始,您可以使用 $sampleRate
运算符:
// { x: 1 }
// { x: 2 }
// { x: 3 }
// { x: 4 }
// { x: 5 }
// { x: 6 }
db.collection.aggregate([ { $match: { $sampleRate: 0.33 } } ])
// { x: 3 }
// { x: 5 }
这与随机选择的输入文档相匹配 (33%)。所选文档的数量近似于采样率,表示为文档总数的百分比。
请注意,这相当于为每个文档添加一个介于 0 和 1 之间的随机数,如果该随机值低于 0.33,则过滤它们。这样你可能会在输出中得到或多或少的文档,运行这几次不一定会给你相同的输出。