【发布时间】:2011-01-26 22:56:36
【问题描述】:
所以,我正在修补 MongoDB,并且我正在尝试使 count() 聚合查询正确扩展,以便我轻松计算文档中某些值在集合中出现的百分比。
我有一个结构如下的文档:
{
foo : 'bar',
moo : 'cow',
values : {
alpha : true,
beta : false,
gamma : false,
delta : true ... (many more)
}
}
现在,我有几千个这样的文档,我想有效地计算 values 对象中所有值的真百分比(或假百分比)(在我的例子中,大约有 50 )。即,alpha 为真、beta 为真等的时间百分比。
我天真地开始使用count(),但似乎它一次只允许一个查询,所以这导致我这样做(使用 PHP Mongo 类,但它基本上只是一个常规的count() 函数:
$array_of_keys = array('alpha', 'beta', 'gamma', 'delta'...);
for($i=0;$i<count($array_of_keys);$i++){
$array_of_keys = [...]
for($i=0;$i<count($array_of_keys);$i++){
$false = intval($collection->count(array($array_of_keys[$i]=>false)));
$true = intval($collection->count(array($array_of_keys[$i]=>true)));
}
但即使记录数量很少(大约 100 条),这也需要 9 秒。
最好的方法是什么?
【问题讨论】: