aggregate() 공개 메소드

public aggregate ( array $options = [] )
$options array
예제 #1
0
 public function testUnwind()
 {
     // add documents
     $this->collection->batchInsert(array(array('subdoc' => array('key' => array(1, 2))), array('subdoc' => array('key' => array(4, 8)))));
     // create pipeline
     $pipeline = new Pipeline($this->collection);
     $pipeline->unwind('$subdoc.key');
     // get result
     $result = $pipeline->aggregate();
     $this->assertEquals(4, count($result));
     $this->assertEquals(1, $result[0]['subdoc']['key']);
     $this->assertEquals(2, $result[1]['subdoc']['key']);
     $this->assertEquals(4, $result[2]['subdoc']['key']);
     $this->assertEquals(8, $result[3]['subdoc']['key']);
     $this->assertTrue((string) $result[0]['_id'] === (string) $result[1]['_id']);
     $this->assertTrue((string) $result[2]['_id'] === (string) $result[3]['_id']);
     $this->assertTrue((string) $result[0]['_id'] !== (string) $result[2]['_id']);
 }
예제 #2
0
 public function testPush()
 {
     $this->collection->insertMultiple(array(array("_id" => 1, "item" => "abc", "price" => 10, "quantity" => 2, "date" => new \MongoDate(strtotime("2014-01-01T08:00:00Z"))), array("_id" => 2, "item" => "jkl", "price" => 20, "quantity" => 1, "date" => new \MongoDate(strtotime("2014-02-03T09:00:00Z"))), array("_id" => 3, "item" => "xyz", "price" => 5, "quantity" => 5, "date" => new \MongoDate(strtotime("2014-02-03T09:05:00Z"))), array("_id" => 4, "item" => "abc", "price" => 10, "quantity" => 10, "date" => new \MongoDate(strtotime("2014-02-15T08:00:00Z"))), array("_id" => 5, "item" => "xyz", "price" => 5, "quantity" => 10, "date" => new \MongoDate(strtotime("2014-02-15T09:05:00Z"))), array("_id" => 6, "item" => "xyz", "price" => 5, "quantity" => 5, "date" => new \MongoDate(strtotime("2014-02-15T12:05:10Z"))), array("_id" => 7, "item" => "xyz", "price" => 5, "quantity" => 10, "date" => new \MongoDate(strtotime("2014-02-15T14:12:12Z")))));
     $pipeline = new Pipeline($this->collection);
     $pipeline->group(function ($stage) {
         /* @var $stage \Sokil\Mongo\Pipeline\GroupStage */
         $stage->setId('$item')->push('itemsSold', array('quantity' => '$quantity', 'price' => '$price', 'quantityPrice' => array('$multiply' => array('$quantity', '$price'))));
     });
     $result = $pipeline->aggregate();
     $this->assertEquals('xyz', $result[0]['_id']);
     $this->assertEquals(5, $result[0]['itemsSold'][0]['quantity']);
     $this->assertEquals(5, $result[0]['itemsSold'][0]['price']);
     $this->assertEquals(25, $result[0]['itemsSold'][0]['quantityPrice']);
 }