Correctly parse Mongo cursor in PHP

When converting MongoCursor to PHP, I use this script. What was presented here by StackOverflow https://stackoverflow.com/a/464626/

using the top method, the structure is the same, but _id is, whereas the bottom script, which gives the result below.

Unfortunately, this leads to the fact that the actual object is embedded in the array with _id from Mongo. Like this:

`4eefa79d76d6fd8b50000007 = { "_id" = { "$id" = 4eefa79d76d6fd8b50000007; }; longText = "Error Description"; nCode = dee29fd7e15ce4ab2d3f7dfa7c5d8fc44b27501ad00908771128c920ef276154; nStatus = Process; nText = "E12345"; nVType = Type1; pId = { "$id" = 4eefa79676d6fd8b50000003; }; pushDate = "2011-12-20+06%3A07%3A41"; updateFlag = 1; };` 

Since I am passing this object to another service to handle _id, it is not known.

How can I convince the php driver to parse the object correctly?

+6
source share
2 answers

I basically did it.

 return json_encode(iterator_to_array($cursor)); 

But this created the above object, which I do not need.

I solved it this way.

  $i=0; foreach($cursor as $item){ $return[$i] = array( '_id'=>$item['_id'], 'nCode'=>$item['nCode'], 'pId'=>$item['pId'], 'nText'=>$item['nText'], 'longText'=>$item['longText'], 'nStatus'=>$item['nStatus'], 'nVType'=>$item['nVType'], 'pushDate'=>$item['pushDate'], 'updateFlag'=>$item['updateFlag'], 'counter' => $i ); $i++; } 

return json_encode ($ return);

+5
source

If you're a big result to save RAM, you can try this more efficient method:

 function outIterator($iterator, $resultName='results') { // Efficient MongoCursor Iterator to JSON // instead of encoding the whole result array to json // process each item individually // in order to save memory by not copying the data multiple times //Start Json Output header('Content-Type: application/json'); echo '{' . $resultName . ': [' //Output each item as json if there are results in the iterator if ($iterator->hasNext()){ foreach ($iterator as $item) { echo json_encode ($fixeditem); if ($iterator->hasNext()) echo ', '; } } //end Json output echo ']}'; } $results = $db->collection->find(); outIterator($results); 
+2
source

Source: https://habr.com/ru/post/904205/


All Articles