0

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

4

2 に答える 2

1

あなたが探している結果は、実際にvaluesはコマンドの応答のキーにあります。の出力全体を見ると、、(参照した)、およびvar_dump()のキーが表示されます。valuesstatsok

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 に答える
1

コマンドは MongoCursor オブジェクトを返しませんが、常に 1 つのドキュメントのみを返します。と同じように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 に答える