Как установить 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
...