2011-03-19 15 views
6

¿Cómo puedo ver y "hacer" cosas con una colección MongoDB después de find() mis resultados? Es decir:Cómo imprimir_r en PHP una colección MongoDB?

<?php 
    $cursor = $collection->find(); 
    json_encode($cursor); 
    //OR 
    print_r($cursor); 
?> 

etc No importa lo que hago me sale nada, pero si yo bucle i puede obtener los datos uno a uno puedo obtener los datos (por supuesto), pero el problema es, yo quiero hacer cosas como codificar la matriz devuelta como un todo a un objeto JSON para hacer cosas AJAX/JS.

Entonces, ¿cómo podría hacer esto?

Respuesta

4

El estándar consiste en recorrer los resultados, con foreach o while.

También hay (como parte de las versiones de PHP> 5.1), iterator_to_array, que se puede utilizar con los cursores de Mongo. Como la nota en Mongo::find cargará todos los resultados en la memoria, , que podría exceder los límites de memoria y bloquear el script, así que tenga en cuenta la cantidad de datos que se espera.

$cursor = $collection->find(); 
$array = iterator_to_array($cursor);. 
+0

Esto: https://gist.github.com/a1cceb8d4ec8ced1fbdb - así es como lo estoy haciendo ahora ... parece desordenado: \ –

4

Usted está tratando de hacer el print_r en un MongoCursor, no una matriz PHP (que no va a funcionar.)

http://php.net/manual/en/class.mongocursor.php

Tendrá que sea convertir el cursor a una matriz PHP ...

<? 
// Connect to Mongo and set DB and Collection 
$mongo = new Mongo(); 
$db = $mongo->twitter; 
$collection = $db->tweets; 

// Return a cursor of tweets from MongoDB 
$cursor = $collection->find(); 

// Convert cursor to an array 
$array = iterator_to_array($cursor); 

// Loop and print out tweets ... 
foreach ($array as $value) { 
    echo "<p>" . $value[text]; 
    echo " @ <b><i>" . $value[created_at] . "</i></b>"; 
} 
?> 

O bien, utilizar findOne() en su lugar, que no devolverá una MongoCursor ... así que si lo que desea es obtener un documento y devolverlo como JSON para su aplicación que puede hacer que sea muy simple como tal (esto demuestra cómo hacer JSON y print_r como lo pidió) ...

Consulte estos artículos para obtener más ayuda ...

http://learnmongo.com/posts/mongodb-php-install-and-connect/

http://learnmongo.com/posts/mongodb-php-twitter-part-1/

<?php 

$connection = new Mongo(); 
$db = $connection->test; 
$collection = $db->phptest; 

$obj = $collection->findOne(); 
echo "<h1>Hello " . $obj["hello"] . "!</h1>"; 

echo "<h2>Show result as an array:</h2>"; 
echo "<pre>"; 
print_r($obj); 
echo "</pre>"; 

echo "<h2>Show result as JSON:</h2>"; 
echo "<pre>"; 
echo json_encode($obj); 
echo "</pre>"; 

?> 
0

Usando la cáscara se puede consultar Mongo de una manera que te mostrará el resultado como una matriz.

db.products.find().toArray() 

Lo anterior imprimirá los "productos" de recogida formateados como una matriz. No he probado, pero es posible que pueda obtener el resultado con PHP y hacer una impresión. Solo un pensamiento.

Cuestiones relacionadas