문제

동일한 시스템에 XAMPP 1.7.3 인스턴스가 실행되고 MongoDB 1.2.4 서버가 있습니다.

연결하고 싶기 때문에 기본적으로 따라 왔습니다. 이 튜토리얼 php.net에서는 연결되는 것처럼 보이지만 커서는 항상 비어 있습니다. 내가 무엇을 놓치고 있는지 모르겠습니다.

여기 내가 시도하는 코드가 있습니다. cursor-> 유효한 것은 항상 거짓이라고 말합니다. 감사해요

<?php
$m = new Mongo(); // connect
try {
  $m->connect();
} catch (MongoConnectionException $ex) {
  echo $ex;
}
echo "conecta...";
$dbs = $m->listDBs();
if ($dbs == NULL) {
  echo $m->lastError();
  return;
}
foreach($dbs as $db) {
  echo $db;
}

$db = $m->selectDB("CDO");
echo "elige bd...";
$col = $db->selectCollection("rep_consulta");
echo "elige col...";

$rangeQuery = array('id' => array( '$gt' => 100));
$col->insert(array('id' => 456745764, 'nombre' => 'cosa'));
$cursor = $col->find()->limit(10);
echo "buscando...";
var_dump($cursor);
var_dump($cursor->valid());
if ($cursor == NULL) echo 'cursor null';
while($cursor->hasNext()) {
    $item = $cursor->current();
    echo "en while...";
    echo $item["nombre"].'...';
}

?>

명령 줄로이 작업을 수행하는 것은 완벽하게 작동합니다

use CDO
db.rep_consulta.find()
-- lot of data here
도움이 되었습니까?

해결책

쿼리 결과를 반복 할 때 커서를 발전시키지 않습니다. 위의 코드를 실행하면 커서가 발전되지 않기 때문에 무한 루프가 발생합니다. 변경해보십시오 :

$item = $cursor->current();

에게

$item = $cursor->getNext();

개인적으로 나는이 구문을 선호합니다.

foreach ($cursor as $item)
{
    var_dump($item);
}

편집하다

다음 코드는 나에게 잘 작동합니다. 시도해 볼 수 있습니까?

$m = new Mongo();

$db = $m->CDO;
$col = $db->rep_consulta;

$col->insert(array('id' => 456745764, 'nombre' => 'cosa'));

$cursor = $col->find()->limit(10);

foreach ($cursor as $item)
{
    var_dump($item);
}

편집 ++

그건 그렇고, $ cursor-> valid ()는 결과의 첫 번째 항목으로 커서를 전진시킬 때까지 true를 반환하지 않습니다. 그것이 당신이 거짓을 얻는 이유입니다. 코드의 해당 시점에서 커서를 아직 발전시키지 못했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top