Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP驱动程序的Mongo独特排序查询_Php_Mongodb - Fatal编程技术网

使用PHP驱动程序的Mongo独特排序查询

使用PHP驱动程序的Mongo独特排序查询,php,mongodb,Php,Mongodb,从PHP Mongo驱动程序发出简单查询时遇到问题。 这是shell查询: db.testing.distinct('summary.type').sort(); 根据文档,我可以执行db->command来使用distinct查询。以下是我尝试过的: $all_types = $db->command( array( "distinct" => "summary.type", "key"

从PHP Mongo驱动程序发出简单查询时遇到问题。 这是shell查询:

db.testing.distinct('summary.type').sort();
根据文档,我可以执行
db->command
来使用distinct查询。以下是我尝试过的:

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

var_dump($all_types);
但是我没有得到我期望的数据,而是得到一个带有索引的游标,如
stats
nscanned
nscannedObjects
我做错了什么

谢谢,
ns

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

<?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'] );
?>

您要查找的结果实际上在命令响应的
键中。如果查看
var_dump()
的整个输出,您将看到
stats
(您提到的)和
ok
的键

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

> 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
应指字段名称。有关这方面的更多信息,请参阅

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