Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP将limit()设置到MongoQuery中?_Php_Mongodb_Php Mongodb - Fatal编程技术网

如何使用PHP将limit()设置到MongoQuery中?

如何使用PHP将limit()设置到MongoQuery中?,php,mongodb,php-mongodb,Php,Mongodb,Php Mongodb,我必须将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-&g

我必须将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()

在PHP中,是
MongoCursor
类的方法,而不是数组的方法。您需要首先获取光标,然后调用其
limit()
方法:

$collection->find($query)->limit(2);
您还可以使用
limit
参数将选项数组添加到
find()
调用中:

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

新的PHP MongoDB库不像旧的PHP Mongo库那样在游标上有
limit()
sort()
方法。现在必须在查询时指定这些参数,例如:

$collection->find($query, [
    'limit' => 10,
    'sort'  => [ 'date' => -1 ],
    'projection' => [
        '_id' => 1,
        'description' => 1,
    ]
];
如果与一起使用,则


这是新PHP mongo的有效解决方案。它通过每个记录中的
num\u 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/>";
        }
$collection=(新MongoDB\Client)->scottybox->pianobar;
//显示按播放次数排序的前25名播放的标题/艺术家
$filter=[];
$result=$collection->find($filter,
[“限制”=>25,
'sort'=>['num_plays'=>-1],
“投影”=>[
'num_plays'=>1,
“艺术家”=>1,
“标题”=>1
]]
);
echo“播放的前25首歌曲”;
foreach($结果为$行){
echo$行->艺术家。“-”$行->标题。“:”;
echo$row->num_播放。“
”; }
前25首播放歌曲

Led齐柏林飞艇-通往天堂的楼梯:65

滚石乐队-给我庇护所:36

汤姆·佩蒂-玛丽·简的最后一支舞:34

齐柏林飞艇-整个洛塔之爱:29

滚石乐队-(我不能得到任何)满意:28

蝎子-像飓风一样摇晃你:28

齐柏林飞艇-嘿嘿我能做什么:28


limit()
是MongoCursor对象的方法,而不是数组的方法
$cursor=$this->collection->find($query)->limit(2)
是否正确@Yury FedorovIt看起来不错,试试看第一个不起作用,可能是因为MongoDB版本(4.4)或php lib版本(我使用的是PHP5.6.21和mongo扩展1.6.0以及mongo捆绑1.15.1),或者因为我使用的是聚合函数,而不是find。但是第二个很好用,谢谢。
$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/>";
        }