Как установить limit() в MongoQuery с помощью PHP?

Я должен использовать Mongodb с php, и пытался получить данные из mongocollection с использованием php. следующий монокок с php возвращает запись успешно. но я хочу установить предел для следующего запроса.

PHP-код:

$query = array("\$and"=>array(array('fld'=> array("\$in"=> array('4', '14', '20'))), array('stat'=>array("\$eq"=>"A"))));

$cursor = $this->collection->find($query);

я также попробовал следующий путь

$query = array("\$and"=>array(array('fld'=> array("\$in"=> array('4', '14', '20'))), array('stat'=>array("\$eq"=>"A")))).limit(2);

Но я получил фатальную ошибку

Вызов неопределенного предела функции ()

Как пользоваться limit() в запросе выше?

3 ответа

Решение

В PHP limit() это метод MongoCursor класс, а не массива. Вам нужно сначала получить курсор, а затем вызвать его limit() метод:

$collection->find($query)->limit(2);

Вы также можете добавить массив параметров к вашему find() позвонить с limit параметр:

$collection->find($query, ['limit' => 2]);

Новая библиотека PHP MongoDB не имеет limit() а также sort() методы на курсорах, как в старой библиотеке PHP Mongo. Теперь они должны быть указаны во время запроса, например:

$collection->find($query, [
    'limit' => 10,
    'sort'  => [ 'date' => -1 ],
    'projection' => [
        '_id' => 1,
        'description' => 1,
    ]
];

Если вы используете драйвер MongoDB с PHP-библиотекой MongoDB, то

require 'vendor/autoload.php';

$client = new MongoDB\Client("mongodb://localhost:27017");
//SELECT * FROM YOUR_TABLE_NAME LIMIT 10
//db.YOUR_COLLECTION_NAME.find({}).limit(10);
$result = $clinet->YOUR_DB_NAME->YOUR_COLLECTION_NAME->find(array(),array('limit'=>10));

Это рабочее решение для нового PHP Монго. Он отображает самые популярные песни в моей коллекции num_plays значения в каждой записи.

$collection = (new MongoDB\Client)->scottybox->pianobar;
        // display top 25 played titles/artist sorted by num_plays
        $filter = [];
        $result = $collection->find($filter, 
[ 'limit'          => 25,
   'sort'          => [ 'num_plays' => -1 ],
   'projection'    => [
                    'num_plays'   => 1,
                    'artist'      => 1,
                    'title'       => 1
                    ]]
        );

        echo "<h2>Top 25 Played Songs</h2>";
        foreach($result as $row){
            echo $row->artist . " - " . $row->title . ": ";
            echo $row->num_plays . "<br/>";
        }

Топ 25 сыгранных песен

Led Zeppelin - Лестница в рай: 65

Роллинг Стоунз - Дай мне укрытие: 36

Том Петти - Последний танец Мэри Джейн: 34

Led Zeppelin - Всего Лотта Любви: 29

The Rolling Stones - (Я не могу получить нет) Удовлетворение: 28

Scorpions - Rock You Like A Ураган: 28

Led Zeppelin - Эй, эй, что я могу сделать: 28

...

Другие вопросы по тегам