Вопрос

У меня работает экземпляр xampp 1.7.3 и сервер MongoDB 1.2.4 на одном компьютере.

Я хочу соединить их, поэтому я в основном следую этот урок на php.net вроде подключается, но курсоры всегда пусты.Я не знаю, чего мне не хватает.

Вот код, который я пытаюсь.Курсор->действительный всегда говорит о ложности.Спасибо

<?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