2016-08-21 28 views
5

我試圖與使用聚合與項目匹配和排序,但我得到一個例外,一個現場(MongoResultException是精確的)說流水線級規範對象必須包含PHP蒙戈合計

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; 

回答

4

看起來問題是你的$ sort任務。你有

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

這實際上並沒有給出'$ sort'階段規範。它不應該是:

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