6

MongoCursor を PHP に変換するときは、このスクリプトを使用します。ここで提示されたのは StackOverflow SO

上の方法を使用すると、構造は同じですが、_id は下のスクリプトを使用すると、以下に含まれる結果が得られます。

残念ながら、これにより実際のオブジェクトが Mongo の _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 ドライバーを納得させるにはどうすればよいですか?

4

2 に答える 2

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

return json_encode($return);

于 2011-12-22T00:15:01.370 に答える
2

RAM を節約するために結果が大きい場合は、次のより効率的な方法を試すことができます。

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);
于 2012-10-01T02:47:48.073 に答える