MongoDB count()在php中是不同的


MongoDB count() distinct in php

我想知道如何计算这个简单的mongodb查询结果的数量,使用php。

<?php
//connection to mongodb
  $collection = new MongoCollection($db, 'User');
  $retval = $collection->distinct("age");
    var_dump($retval);
?>

我如何计数有多少结果进入$检索变量?

sorory ,要知道$ reval中有多少个结果很简单。就这样写:

echo count($retval);

我的解决方案返回一个条目的子条目数。不是简单不同集合的计数^^

例如,如果你有这些数据:

Age:  |  User:
--------------
{ "age":"20", "name":"David" }, 
{ "age":"20", "name":"Goerge" }, 
{ "age":"22", "name":"tiffany" }

我的解决方案返回一个数组,当你每个这个数组,如:

foreach ($retval as $row) 
       echo($row['age'] . ': ' . $row['count'] . "'n");

数据返回:

20 : 2
22 : 1

新的聚合框架将使这变得容易:http://php.net/manual/en/mongocollection.aggregate.php

$project = array('$project'=> array("age"=>1)); //pick only the age field
$group = array('$group'=>array("_id"=>'$age')); //group by age field
$count = array('$group'=>array("_id"=>null,"count"=>array('$sum'=>1))); //count distinct    
$result = $collection->aggregate(array($project,$group,$count));
echo $result['result'][0]['count']; 

MongoDB的PHP文档描述了如何在获取集合中计数:http://www.php.net/manual/en/mongocollection.count.php

对于不同结果的计数,您可以在组收集中创建map-reduce,如以下示例:

<?php
$retval = $collection->group(
    array('age' => true), // field(s) to group by
    array('count' => 0), 
    new MongoCode('function(doc, prev) { prev.count += 1 }'), 
    array(null) // condition
    );
?>

new MongoCode(..)

函数接受当前文档和到此点的聚合,并执行聚合。最后你可以得到count:

print($retval["count"]);
$collection = new MongoCollection($db, 'contacts');  
$keys = array("Department" => 1);
// set intial values
$initial = array("count" => 0);
// JavaScript function to perform
$reduce = "function (obj, prev) { prev.count++; }";

// only use documents where the "state" field is ar
$condition = array('condition' => array("State" => 'AR'));
$results = $collection->group($keys, $initial, $reduce, $condition);
foreach ($results['retval'] as $key => $value) {
    echo 'Contacts in state AR with department '.$value['Department'] . ' are:'. $value['count'];
    echo '<br />';
}