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