Question

J'ai un xampp 1.7.3 instance d'exécution et un serveur MongoDB 1.2.4 sur la même machine.

Je veux les connecter, donc j'ai été essentiellement ce tutoriel sur php.net, il semble se connecter, mais les curseurs sont toujours vides. Je ne sais pas ce que je manque.

Voici le code que je suis en train. Le cursor-> valide dit toujours faux. merci

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

?>

le faire en ligne de commande fonctionne parfaitement

use CDO
db.rep_consulta.find()
-- lot of data here
Était-ce utile?

La solution

Lorsque les résultats itérer de la requête que vous n'êtes pas faire avancer le curseur. L'exécution de votre code ci-dessus provoque une boucle infinie puisque le curseur n'est pas avancé. Essayez de changer:

$item = $cursor->current();

à

$item = $cursor->getNext();

Personnellement, je préfère cette syntaxe:

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

Modifier

Le code suivant fonctionne très bien pour moi. Pouvez-vous essayer?

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

Modifier ++

Par ailleurs, $ cursor-> valide () ne retournera pas vrai jusqu'à ce que vous avancez le curseur sur le premier élément du résultat. C'est pourquoi vous obtenez faux. Vous avez encore pour faire avancer le curseur à ce point dans votre code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top