Вопрос
У меня работает экземпляр 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, пока вы не переместите курсор на первый элемент результата.Вот почему вы получаете ложь.Вам еще предстоит переместить курсор в этот момент вашего кода.