0

我是 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。我做错了什么?

4

1 回答 1

2

与 SQL 等效的 MongoDBLIMIT通常是游标方法limit()skip(). 不幸的是,PHP 驱动程序MongoCollection::group返回结果集而不是游标。但是您可以做的是使用MongoCollection::aggregate和使用三个运算符的聚合管道:

  1. $group 按您的分组标准
  2. $limit 只取前 100 个
  3. $skip 忽略前两个

这些示例对数据结构使用 JSON 语法,但不难将它们转换为 PHP 的关联数组语法。

顺便说一句:您没有对结果进行排序。跳过通常仅在您的结果按某些标准排序时才有意义,因为否则您不知道将跳过哪些文档。MongoDB 返回文档的顺序是未指定的。它可能看起来像您的开发环境中的插入顺序,但这并不能保证,并且会在一些删除、更新和插入后可靠地停止发生。如果要对结果进行排序,请将$sort添加到点 1 和 2 之间的聚合管道。

于 2013-09-10T09:32:54.303 回答