1

仕事で新しいプロジェクトにmongoDBを使用していますが、解決策が見つからない問題が発生しました。私のプロジェクトには、MongoDB からいくつかのデータをフェッチするメソッドを含むモデルがあります。

メソッド:

public function getData($input) {

        $output = $this->_collection->find($input);
        //$output = $this->_collection->findOne($input);
        Zend_Debug::Dump($output);
        return $output;
    }

そのコードを実行すると、ダンプから次のようになります。

object(MongoCursor)#52 (0) {
}

findOne() の使用:

array(12) {
  ["_id"] => object(MongoId)#54 (1) {
    ["$id"] => string(24) "4fd85d178efd307080000001"
  }
  ["autoadd"] => string(1) "1"
  ["name"] => string(5) "Sport"
  ["keyword"] => string(8) "cookie29"
  ["antal"] => string(1) "0"
  ["antal_week_date"] => string(10) "1218818007"
  ["version"] => string(1) "1"
  ["active"] => string(1) "1"
  ["antal_week"] => string(1) "0"
  ["customer_id"] => string(1) "2"
  ["id"] => string(2) "29"
  ["insert_date"] => string(10) "2007-11-21"
}

そして使用する場合$output = $this->_collection->find($input)->count();

int(20)

私は何を間違っていますか?これは単純な問題かもしれませんが、これを行う他の方法が見つかりません。入力が何であるか疑問に思うなら、それは単なる連想配列です:

$data = array('active' => '1');

これらの 20 の素敵な「行」データをすべてフェッチするのを手伝ってください。ありがたく思います。

あなたのアドバイスとより良い知恵をありがとう!

4

1 に答える 1

13

find()実際のデータを含む配列ではなく、カーソルを返します。カーソルを繰り返す必要があります。これはドキュメントの例です

$m = new Mongo();
$db = $m->selectDB('test');
$collection = new MongoCollection($db, 'phpmanual');

// search for documents where 5 < x < 20
$rangeQuery = array('x' => array( '$gt' => 5, '$lt' => 20 ));

$cursor = $collection->find($rangeQuery);
foreach ($cursor as $doc) {
    var_dump($doc);
}
于 2012-06-20T13:48:02.270 に答える