我是Mongodb的新手,我想知道如何限制组调用(PHP)中的结果。经过一番研究,我发现唯一的方法就是写一个"减速器"
这是我目前拥有的
$reduce = "function (obj, prev) { ";
$reduce .= "if(prev.count >= 2){";
$reduce .= "prev.mailSubject = obj.mailSubject;";
$reduce .= "}";
$reduce .= "prev.count+=1;";
$reduce .="}";
$res = $this->db->forms->group(
array('formid' => true),
array('mailSubject' => ''),''),
$reduce
);
似乎并没有减少任何东西,我仍然得到了与我没有放入 if 相同的结果。我做错了什么?
相当于 SQL LIMIT
的 MongoDB 通常是游标方法limit()
和skip()
。不幸的是,PHP 驱动程序MongoCollection::group
返回结果集而不是游标。但您可以改为使用 MongoCollection::aggregate
并使用包含三个运算符的聚合管道:
- 按分组条件$group
- $limit只拿前100名
- $skip忽略前两个
这些示例对数据结构使用 JSON 语法,但将它们转换为 PHP 的关联数组语法应该不难。
顺便说一句:你没有对结果进行排序。跳过通常只有在按某些条件对结果进行排序时才有意义,因为否则您不知道将跳过哪些文档。MongoDB返回文档的顺序未指定。在您的开发环境中,它可能看起来像广告顺序,但这并不能保证,并且在进行一些移除、更新和插入后会可靠地停止。如果要对结果进行排序,请将$sort添加到点 1 和点 2 之间的聚合管道中。