如果我在mongo集合中的数据类似于
{ "_id" : ObjectId("4fff9946af8c6149aed251ab"), "subject_slug" : "math", "lesson_slug" : "mat01" }
{ "_id" : ObjectId("4fff9946af8c6149aed251ac"), "subject_slug" : "math", "lesson_slug" : "mat02" }
{ "_id" : ObjectId("4fff9946af8c6149aed251ad"), "subject_slug" : "math", "lesson_slug" : "mat03" }
{ "_id" : ObjectId("4fff9946af8c6149aed251ae"), "subject_slug" : "eng", "lesson_slug" : "eng01" }
{ "_id" : ObjectId("4fff9946af8c6149aed251af"), "subject_slug" : "eng", "lesson_slug" : "eng02" }
{ "_id" : ObjectId("4fff9946af8c6149aed251b0"), "subject_slug" : "eng", "lesson_slug" : "eng03" }
{ "_id" : ObjectId("4fff9946af8c6149aed251b1"), "subject_slug" : "phy", "lesson_slug" : "phy01" }
{ "_id" : ObjectId("4fff9946af8c6149aed251b2"), "subject_slug" : "phy", "lesson_slug" : "phy02" }
{ "_id" : ObjectId("4fff9946af8c6149aed251b3"), "subject_slug" : "phy", "lesson_slug" : "phy03" }
{ "_id" : ObjectId("4fff9946af8c6149aed251b4"), "subject_slug" : "chem", "lesson_slug" : "che01" }
{ "_id" : ObjectId("4fff9946af8c6149aed251b5"), "subject_slug" : "chem", "lesson_slug" : "che02" }
{ "_id" : ObjectId("4fff9946af8c6149aed251b6"), "subject_slug" : "chem", "lesson_slug" : "che03" }
{ "_id" : ObjectId("4fff9946af8c6149aed251b7"), "subject_slug" : "chem", "lesson_slug" : "che04" }
以及如果我想要第6行中没有循环数据的数据。php中是否有获取该行数据的短代码???
为了找到第六条记录,您需要使用一些MongoCursor方法:
sort()
,所以有一个特定的顺序(例如通过_id
)skip()
跳过多条记录(跳过5找到第6条)limit()
限制为一个结果
代码示例:
<?php
$mongo = new Mongo();
$collection = $mongo->mydb->subject;
$query = array();
$sort = array('_id' => 1);
// Find the 6th record
$doc = $collection->find($query)->sort($sort)->skip(5)->limit(1)->getNext();
print_r($doc);
?>
样本输出:
Array
(
[_id] => MongoId Object
(
[$id] => 4fff9946af8c6149aed251b0
)
[subject_slug] => eng
[lesson_slug] => eng03
)
请注意,如果需要跳过大量文档,skip()
的性能可能会出现问题。如果可能的话,一个更高性能的选项是使用有限制的范围查询。
这看起来像一个json格式的内容,把它们全部读取到一个对象中,然后json_edecode它们到另一个对象,这样以后就可以读取第6行了。