0

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

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我 在做什么错nscannednscannedObjects

谢谢, ns

4

2 回答 2

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"
}
于 2012-06-11T15:22:20.203 回答
1

您要查找的结果实际上在values命令响应的键中。如果您查看 的整个输出var_dump(),您会看到valuesstats(您提到的)和的键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 文档

于 2012-06-11T15:27:28.913 回答