Pregunta

Tengo un XAMPP 1.7.3 instancia en ejecución y un servidor MongoDB 1.2.4 en la misma máquina.

Quiero conectar ellos, así que básicamente he estado siguiendo este tutorial en php.net, parece conectar pero los cursores son siempre vacío. No sé lo que me estoy perdiendo.

Aquí está el código que estoy tratando. El Cursor-> válida siempre dice falsa. gracias

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

?>

hacer esto mediante la línea de comandos funciona perfecto

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

Solución

Cuando la iteración de los resultados de la consulta que no está avanzando el cursor. El funcionamiento de su código está causando un bucle infinito ya que el cursor no está avanzando. Prueba a cambiar:

$item = $cursor->current();

a

$item = $cursor->getNext();

En lo personal, prefiero esta sintaxis:

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

Editar

El siguiente código está trabajando muy bien para mí. ¿Puede probarlo?

$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 ++

Por cierto, $ Cursor-> válida () no devolverá cierto hasta que se avanza el cursor hasta el primer elemento del resultado. Es por eso que está recibiendo falsa. Usted todavía tiene que avanzar el cursor en ese punto en el código.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top