管道阶段规范对象必须包含一个带有php mongo聚合的字段

时间:2016-08-21 02:00:46

标签: php mongodb mongodb-query mlab

我正在尝试使用聚合与项目,匹配和排序,但我得到一个例外(确切地说MongoResultException)说

exception: A pipeline stage specification object must contain exactly one field.

当我没有使用排序和限制时,它工作正常,但我需要它们。我没有使用find()的原因是因为我在某处读到它可以提高性能。 请帮忙

$query = array(.... //An actual query that works with find()
$collection = $this->db->CollectionName;
            $project = array(
                '$project'  => array(
                    'Field1'    => 1,
                    'Field2'=> 1,
                    'Field3'=> 1,
                    'Field4'      => 1
                )
            );
            $match = array( '$match'=>$query);
            $sort = array('Field3' => -1, 'Field4'=>-1);
            $limit = array('$limit' => 100);


            $result = $collection->aggregate(array($match,$project,$sort,$limit));
            return $result;

1 个答案:

答案 0 :(得分:4)

看起来问题是您的$sort作业。

   $sort = array('Field3' => -1, 'Field4'=>-1);

实际上并没有给出$sort阶段规范。不应该是:

    $sort = array('$sort' => array( 'Field3' => -1, 'Field4'=>-1 ) );