2011-12-21 10 views
6

Al convertir un MongoCursor a PHP utilizo este script. Que fue presentado aquí StackOverflowSOCorrectamente analizar un cursor Mongo a PHP

utilizando el método superior, la estructura es igual pero _id es mientras que usando la secuencia de comandos inferior que produce el resultado a continuación incluido.

Desafortunadamente, esto da como resultado que el objeto real se incruste en una matriz con _id de Mongo. De esta manera:

`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; 
     };` 

Dado que estoy pasando este objeto a otro servicio para procesar el _id no se conoce.

¿Cómo puedo convencer al controlador de PHP para analizar correctamente el objeto?

+0

no entiendo su pregunta – Petrogad

+0

El problema es que la ID se está anidado, pero ellos necesitan publicar su código Por favor, publique su código user1094824. –

+0

'_id' que contiene '$ id' es de esperar, ya que su documento contiene un objeto MongoId (clave generada por mongo, devuelta por php como clase/objeto MongoId), que se representa con '$ id'. –

Respuesta

5

Básicamente lo que hice fue esto.

return json_encode(iterator_to_array($cursor)); 

Pero esto creó el objeto antes mencionado que no es lo que necesitaba.

Lo resolví de esta manera.

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

2

Si resultado es grande con el fin de ahorrar memoria RAM puede probar este método más eficiente:

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); 
Cuestiones relacionadas