流水线阶段规范对象必须恰好包含一个具有 php mongo 聚合的字段
A pipeline stage specification object must contain exactly one field with php mongo aggregate
我正在尝试将聚合与项目、匹配和排序一起使用,但我收到一个异常(准确地说是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;
看来问题出在您的 $sort
作业上。你有
$sort = array('Field3' => -1, 'Field4'=>-1);
实际上并没有给出 $sort
阶段规范。不应该是:
$sort = array('$sort' => array( 'Field3' => -1, 'Field4'=>-1 ) );
我正在尝试将聚合与项目、匹配和排序一起使用,但我收到一个异常(准确地说是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;
看来问题出在您的 $sort
作业上。你有
$sort = array('Field3' => -1, 'Field4'=>-1);
实际上并没有给出 $sort
阶段规范。不应该是:
$sort = array('$sort' => array( 'Field3' => -1, 'Field4'=>-1 ) );