2013-04-26 83 views
0

我有一个教室集合结构为我们如何获得Mongodb中的所有数组元素?

{ 
    "_id" : ObjectId("517a54a69de5ee980b000003"), 
    "class_name" : "A", 
    "students" : [{ 
    "sname" : "John", 
    "age" : "13" 
    }, { 
    "sname" : "Marry", 
    "age" : "12" 
    }, { 
    "sname" : "Gora", 
    "age" : "12" 
    }] 
} 

,使用PHP,我想获得并列出基于类_id所有学生。我们该怎么做?

更新查询我使用

$student_list=$collection->find(array(" rid"=>new MongoId($theObjId)), 
     array(
      "students" => 1, 
     ) 
     ); 

我想打印出来的学生全部名单。我无法通过使用Foreach循环来管理它。

+1

做一个json_encode,你会得到一个数组。那么你可以循环键/ val – Satya 2013-04-26 11:29:24

+0

你的意思是你不知道如何通过class_id查询和返回学生? – Adil 2013-04-26 11:39:50

+0

@Adil:请参阅更新 – mustafa 2013-04-26 11:47:22

回答

1

$ student_list是多行的MongoCursor。您需要循环访问您要查找的行。像这样:

$cursor = $collection->find(array("_id"=>new MongoId($theObjId)), 
     array("students" => 1)); 

foreach($cursor as $row) 
    foreach($row['students'] as $student) 
     echo $student["sname"], $student["age"]; 

此外,请考虑使用findOne。它更适合您的查询。

+0

@ Adil:谢谢,它现在有效。 – mustafa 2013-04-26 12:28:31

2

所有你需要做的就是调用findOne()而不是find()

$classroom = $collection->findOne(
    array('_id' => new MongoId($theObjId)), 
    array('students' => 1) 
); 

$classroom['students']; // will be an array of students 

http://php.net/manual/en/mongocollection.findone.php

+0

谢谢,这也做了这项工作。 – mustafa 2013-04-26 12:32:59

相关问题