2011-12-21 11 views
6

पर उचित रूप से पार्स करें जब एक मोंगो कर्सर को PHP में कनवर्ट करते समय मैं इस स्क्रिप्ट का उपयोग करता हूं। जो यहाँ StackOverflowSOएक मोंगो कर्सर को PHP

प्रस्तुत किया गया था ऊपरी पद्धति का उपयोग करके, संरचना में ही है लेकिन _ id कम स्क्रिप्ट जो नीचे शामिल परिणाम पैदावार का उपयोग कर, जबकि है।

दुर्भाग्य से, परिणामस्वरूप वास्तविक वस्तु को मोंगो से _id के साथ सरणी में एम्बेड किया जा रहा है। इस तरह:

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

चूंकि मैं इस ऑब्जेक्ट को _id को संसाधित करने के लिए किसी अन्य सेवा में पास कर रहा हूं, ज्ञात नहीं है।

मैं ऑब्जेक्ट को सही तरीके से पार्स करने के लिए PHP ड्राइवर को कैसे समझा सकता हूं?

+0

मैं आपके सवाल का – Petrogad

+0

समझ में नहीं आता समस्या यह है कि आईडी नेस्ट हो रही है है, लेकिन हम करने के लिए उन्हें जरूरत अपना कोड पोस्ट करें। कृपया अपना कोड उपयोगकर्ता 10 9 4824 पोस्ट करें। –

+0

'_id' युक्त '$ id' वास्तव में अपेक्षित है, क्योंकि उसके दस्तावेज़ में एक मोंगोआईड ऑब्जेक्ट (मोंगो जेनरेट की गई कुंजी, php द्वारा MongoId क्लास/ऑब्जेक्ट के रूप में लौटाई गई) है, जिसे '$ id' के साथ दर्शाया गया है। –

उत्तर

5

मूल रूप से मैंने यह किया था।

return json_encode(iterator_to_array($cursor)); 

लेकिन इसने उपर्युक्त वस्तु बनाई जो मुझे चाहिए।

मैंने इसे इस तरह हल किया।

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

वापसी json_encode ($ वापसी);

2

यदि आप परिणाम बड़ा है आदेश रैम को बचाने के लिए आप इस और अधिक कुशल विधि की कोशिश कर सकते:

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); 
संबंधित मुद्दे