我必须使用Mongodb和php,并尝试使用php从mongocollection获取数据。随后的mongoquery与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()
如何在上述查询中使用limit()
?
答案 0 :(得分:3)
新的PHP MongoDB库在游标上没有像旧的PHP Mongo库那样的limit()
和sort()
方法。现在必须在查询时指定这些,例如:
$collection->find($query, [
'limit' => 10,
'sort' => [ 'date' => -1 ],
'projection' => [
'_id' => 1,
'description' => 1,
]
];
答案 1 :(得分:2)
在PHP中,limit()
是MongoCursor
类的方法,而不是数组。您需要先获取光标,然后调用其limit()
方法:
$collection->find($query)->limit(2);
您还可以使用find()
参数
limit
来电添加选项数组
$collection->find($query, ['limit' => 2]);
答案 2 :(得分:0)
如果您将MongoDB driver与MongoDB PHP library一起使用,那么
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));
答案 3 :(得分:0)
这是新的PHP mongo的有效解决方案。它将通过每条记录中的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首歌曲
齐柏林飞艇-通往天堂的阶梯:65
滚石乐队-Gimme庇护所:36
汤姆·佩蒂(Tom Petty)-玛丽·简(Mary Jane)的最后一支舞:34
齐柏林飞艇-整个洛塔之恋:29
滚石乐队-(我无法接受)满意度:28
蝎子-像飓风般摇滚:28
齐柏林飞艇-嘿,我该怎么办:28
...