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


How can I get data from a specific row (eg. 6th row) in a mongoDB collection?

如果我在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行了。