2011-12-21 16 views
6

Podczas konwersji MongoCursora na PHP używam tego skryptu. Co zostało przedstawione tutaj StackOverflowSOPrawidłowo przeanalizuj kursor Mongo do PHP

pomocą górnego sposobie, struktura jest taka sama, ale _id jest natomiast za pomocą dolnego skrypt otrzymuje się poniżej zawarte wynik.

Niestety, powoduje to, że rzeczywisty obiekt jest osadzony w tablicy z _id z Mongo. W ten sposób:

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

Ponieważ przekazuję ten obiekt innej usłudze do przetwarzania, nie jest znane.

Jak mogę przekonać sterownik PHP, aby poprawnie przeanalizować obiekt?

+0

nie rozumiem pytanie – Petrogad

+0

Problemem jest to, że id jest uzyskiwanie zagnieżdżone, ale musimy je opublikuj ich kod. Proszę napisać swój kod user1094824. –

+0

'_id' zawierający '$ id' jest w rzeczywistości oczekiwany, ponieważ jego dokument zawiera obiekt MongoId (klucz wygenerowany przez mongo, zwrócony przez php jako klasa/obiekt MongoId), który jest reprezentowany przez '$ id'. –

Odpowiedz

5

Zasadniczo to, co zrobiłem, było to.

return json_encode(iterator_to_array($cursor)); 

Ale to stworzyło wspomniany obiekt, który nie jest tym, czego potrzebowałem.

Rozwiązałem to w ten sposób.

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

powrót json_encode ($ return);

2

Jeśli wynik jest wielki w celu zaoszczędzenia pamięci RAM można spróbować to bardziej efektywne metody:

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); 
Powiązane problemy