如何从mongoDB集合中的特定行(例如,第6行)获取数据?

时间:2012-08-20 04:32:07

标签: php mongodb

如果我在集合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中的短代码来获取该行中的数据?

2 个答案:

答案 0 :(得分:4)

为了找到第六条记录,您需要使用一些MongoCursor methods

  • 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()的性能可能会出现问题。如果可能,更高性能的选项是使用具有限制的范围查询。

答案 1 :(得分:0)

这看起来像是一个json格式化的内容,如何将它们全部读入一个对象,然后json_decode将它们转换为另一个,以便稍后您可以只读出第6行。