Итак, я работаю с MongoDB и пытаюсь получить агрегацию count()
, которая правильно масштабируется, чтобы позволить мне легко рассчитать процент появления определенных значений в документе в коллекции.
У меня есть документ со структурой, такой как:
{
foo : 'bar',
moo : 'cow',
values : {
alpha : true,
beta : false,
gamma : false,
delta : true ... (many more)
}
}
Теперь у меня есть несколько тысяч таких документов, и я хочу эффективно рассчитать процент истинного (или процент ложного) всех значений в объекте values
(а в моем случае их ~ 50).т. е. какой процент времени альфа верна, бета верна и т. д.
Я начал наивно с 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 секунд.
Какой лучший подход для этого?