5

I am trying to use aggregate with with project, match and sort but i am getting an exception (MongoResultException to be exact) saying

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

It works fine when I did not use sort and limit but I need them for this. The reason I am not using find() because I read somewhere that it can increase performance. Please help

$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;
Community
  • 1
  • 1
Asif Alamgir
  • 1,454
  • 1
  • 16
  • 41

1 Answers1

4

It looks like the problem is your $sort assignment. You have

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

which doesn't actually give the $sort stage specification. Shouldn't it be:

    $sort = array('$sort' => array( 'Field3' => -1, 'Field4'=>-1 ) );
Muhammad Hassaan
  • 7,296
  • 6
  • 30
  • 50
Wake
  • 1,686
  • 10
  • 14