我是Mongodb的新手,我想知道如何限制组调用(PHP)中的结果。 经过一些研究,我发现唯一的方法是写一个“reducer”
这就是我目前所拥有的
$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放进去。我做错了什么?
答案 0 :(得分:2)
与SQL LIMIT
等效的MongoDB通常是游标方法limit()
和skip()
。不幸的是,PHP驱动程序MongoCollection::group
返回结果集而不是游标。但你可以做的是使用MongoCollection::aggregate
并使用三个运算符的聚合管道:
这些示例对数据结构使用JSON语法,但将它们转换为PHP的关联数组语法应该不难。
顺便说一下:您没有对结果进行排序。跳过通常仅在您按照某些条件对结果进行排序时才有意义,因为否则您将不知道将跳过哪些文档。 MongoDB返回文档的顺序未指定。它可能看起来像您的开发环境中的插入顺序,但这不能保证,并且在一些删除,更新和插入后将可靠地停止发生。如果要对结果进行排序,请将$sort添加到第1点和第2点之间的聚合管道。