Phalcon\Db\Adapter\MongoDB\Functions::isLastPipelineOperatorOut PHP Method

isLastPipelineOperatorOut() public static method

This is used for determining whether the aggregation pipeline msut be executed against a primary server.
public static isLastPipelineOperatorOut ( array $pipeline ) : boolean
$pipeline array List of pipeline operations
return boolean
    public static function isLastPipelineOperatorOut(array $pipeline)
    {
        $lastOp = end($pipeline);
        if ($lastOp === false) {
            return false;
        }
        $lastOp = (array) $lastOp;
        return key($lastOp) === '$out';
    }

Usage Example

Example #1
0
 /**
  * Executes an aggregation framework pipeline on the collection.
  *
  * Note: this method's return value depends on the MongoDB server version
  * and the "useCursor" option. If "useCursor" is true, a Cursor will be
  * returned; otherwise, an ArrayIterator is returned, which wraps the
  * "result" array from the command response document.
  *
  * Note: BSON deserialization of inline aggregation results (i.e. not using
  * a command cursor) does not yet support a custom type map
  * (depends on: https://jira.mongodb.org/browse/PHPC-314).
  *
  * @see Aggregate::__construct() for supported options
  *
  * @param array $pipeline List of pipeline operations
  * @param array $options Command options
  *
  * @return Traversable
  */
 public function aggregate(array $pipeline, array $options = [])
 {
     $hasOutStage = Functions::isLastPipelineOperatorOut($pipeline);
     /* A "majority" read concern is not compatible with the $out stage, so
      * avoid providing the Collection's read concern if it would conflict.
      */
     if (!isset($options['readConcern']) && !($hasOutStage && $this->readConcern->getLevel() === ReadConcern::MAJORITY)) {
         $options['readConcern'] = $this->readConcern;
     }
     if (!isset($options['readPreference'])) {
         $options['readPreference'] = $this->readPreference;
     }
     if ($hasOutStage) {
         $options['readPreference'] = new ReadPreference(ReadPreference::RP_PRIMARY);
     }
     if (!isset($options['typeMap']) && (!isset($options['useCursor']) || $options['useCursor'])) {
         $options['typeMap'] = $this->typeMap;
     }
     $operation = new Aggregate($this->databaseName, $this->collectionName, $pipeline, $options);
     $server = $this->manager->selectServer($options['readPreference']);
     return $operation->execute($server);
 }