Pergunta

Eu tenho um xampp 1.7.3 instância em execução e um servidor MongoDB 1.2.4 na mesma máquina.

Eu quero conectá-los, então eu basicamente ter sido seguinte este tutorial em php.net, parece se conectar, mas os cursores são sempre vazio. Eu não sei o que estou ausente.

Aqui está o código que estou tentando. O Cursor> válido sempre diz falsa. graças

<?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"].'...';
}

?>

fazendo isso por linha de comando funciona perfeito

use CDO
db.rep_consulta.find()
-- lot of data here
Foi útil?

Solução

Quando a iteração os resultados da consulta que você está não avançar o cursor. Executando o seu código acima está causando um loop infinito desde o cursor não está a ser avançado. Tente mudar:

$item = $cursor->current();

para

$item = $cursor->getNext();

Pessoalmente, eu prefiro esta sintaxe:

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

Editar

O código a seguir está funcionando bem para mim. você pode experimentá-lo?

$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);
}

Editar ++

A propósito, $ Cursor-> válido () não irá retornar verdadeiro até que você avançar o cursor para o primeiro item do resultado. É por isso que você está recebendo falsas. Você ainda tem que avançar o cursor naquele ponto em seu código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top