2012-06-11 63 views
0

从PHP Mongo驱动程序发出简单查询时遇到一些麻烦。 这是壳查询:使用PHP驱动程序的Mongo独特排序查询

db.testing.distinct('summary.type').sort(); 

根据该文件,我可以做一个db->command使用不同的查询。这里是我已经试过:

$all_types = $db->command(
     array(
      "distinct"  => "summary.type", 
      "key"   => "summary.type" 
    ) 
); 

var_dump($all_types); 

但是,而不是找回我所期望的数据,我只得到与像statsnscannednscannedObjects 指标我在做什么错光标?

感谢, NS

回答

1

命令不返回MongoCursor对象,但始终只是一个文档。就像findOne()一样。在这个返回的文档,则返回数组中的values数组元素包含所有结果的数组:

<?php 
$m = new Mongo; $c = $m->demo->pubs; $c->drop(); 

$c->insert(array('name' => 'Betsy Smith', 'city' => 'London')); 
$c->insert(array('name' => 'London Tavern', 'city' => 'London')); 
$c->insert(array('name' => 'Lammars',  'city' => 'Manchester')); 
$c->insert(array('name' => 'Weatherspoons', 'city' => 'Coventry')); 

$r = $m->demo->command(array(
    'distinct' => 'pubs', 
    'key' => 'city', 
    'query' => array('name' => array('$ne' => 'Weatherspoons')) 
)); 
var_dump($r['values']); 
?> 

将返回:

array(2) { 
    [0] => 
    string(6) "London" 
    [1] => 
    string(10) "Manchester" 
} 
1

你正在寻找的结果实际上是在values命令响应的关键。如果您查看var_dump()的整个输出,您会看到values,stats(您提到的)和ok的密钥。

在JavaScript控制台,集合的distinct()辅助函数实际上为您处理展开,你可以看到查看源代码时:

> db.testing.distinct 
function (keyString, query) { 
    var res = this._distinct(keyString, query); 
    if (!res.ok) { 
     throw "distinct failed: " + tojson(res); 
    } 
    return res.values; 
} 

而且,我相信你有正在发行的命令是错误的通过PHP驱动程序。 distinct选项应该引用集合名称,而key应该引用该字段名称。有关更多信息,请参阅Distinct docs

相关问题