문제
동일한 시스템에 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를 반환하지 않습니다. 그것이 당신이 거짓을 얻는 이유입니다. 코드의 해당 시점에서 커서를 아직 발전시키지 못했습니다.
제휴하지 않습니다 StackOverflow