将MongoCursor转换为PHP时,我使用此脚本。这是在这里提出的 StackOverflow SO
使用upper方法,结构相同,但_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驱动程序正确解析对象?
答案 0 :(得分: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($ return);
答案 1 :(得分: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);