2013-12-11 7 views
0

Я пытаюсь выполнить итерацию MongoCursor с помощью цикла foreach, как показано в приведенном ниже коде. Цикл возвращает только первую запись. Может ли кто-нибудь выяснить, в чем проблема?Проблема с итерацией MongoCursor с использованием цикла foreach с php

Вот мой код

$usrcollection = $db->users; 
$user = new MongoId($userid); 
$where = array('_id' => $user); 
$filter = array('courses.coursename' =>true, 'courses.startdate' => true,'courses.duration' => true, 'courses.status' => true,'courses.completed' => true,'courses.institute' => true,'courses.instructor' => true,'courses.coursecreated' => true, '_id' => 0); 
$usercursor = $usrcollection->find($where,$filter); 

$j = 0; 
foreach ($usercursor as $value) { 
    echo($value['courses'][$j]['coursename']);  
    $j++; 
} 

Выход print_r является

Array ([courses] => Array ([0] => Array ([coursename] => Machine learning [startdate] => 2013-12-01 [duration] => 12 Weeks [institute] => Standford University [instructor] => Dr Lafore [status] => Inprogress [completed] => 20 [coursecreated] => MongoDate Object ([sec] => 1386751059 [usec] => 0)) [1] => Array ([coursename] => Fashion Design [startdate] => 2013-12-10 [duration] => 3 Weeks [institute] => MIT [instructor] => Ebay [status] => Inprogress [completed] => 0 [coursecreated] => MongoDate Object ([sec] => 1386753755 [usec] => 0)))) 

Схема MongoDb ниже

{ 
"_id": ObjectId("52972705f770dff815000002"), 
"badge": "Gold", 
"badgecount": NumberInt(3), 
"badgedate": ISODate("2013-11-13T05:53:49.0Z"), 
"badges": { 
"0": { 
    "badgename": "Silver", 
    "achievedon": ISODate("2013-10-05T05:53:49.0Z") 
    }, 
"1": { 
    "badgename": "Gold", 
    "achievedon": ISODate("2013-11-13T05:53:49.0Z") 
    } 
}, 
"courses": { 
"0": { 
    "coursename": "Machine learning", 
    "startdate": "2013-12-01", 
    "duration": "12 Weeks", 
    "institute": "Standford University", 
    "instructor": "Dr Lafore ", 
    "status": "Inprogress", 
    "completed": "20", 
    "coursecreated": ISODate("2013-12-11T08:37:39.0Z") 
    }, 
    "1": { 
    "coursename": "Fashion Design", 
    "startdate": "2013-12-10", 
    "duration": "3 Weeks", 
    "institute": "MIT", 
    "instructor": "Ebay", 
    "status": "Inprogress", 
    "completed": NumberInt(0), 
    "coursecreated": ISODate("2013-12-11T09:22:35.0Z") 
    } 
}, 
"datejoined": ISODate("2013-10-01T05:53:49.0Z"), 
"education": { 
    "0": "Msc Computer science" 
} 
} 

ответ

0

Попробуйте это.

foreach ($usercursor as $value) { 
    for($i = 0; $i < count($value['courses']); $i++) { 
     echo($value['courses'][$i]['coursename']);  
    } 
} 

Проблема заключается в том, что find() возвращает указатель, а не результат. Предпросмотр, который вы выполняете, только извлекает все строки и делает то, что вам нужно, вам нужен еще один цикл.

+0

Спасибо! он отлично работает. –

+0

Хорошо, проверьте, как вы ответили, поэтому ppl знает, что он ответил :) – gprusiiski

Смежные вопросы