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;
Wake
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 ) );
来源:https://stackoverflow.com/questions/39060221/a-pipeline-stage-specification-object-must-contain-exactly-one-field-with-php-mo