public function testSubtract_CallableExpressin() { $pipeline = new Pipeline($this->collection); $pipeline->group(function ($stage) { /* @var $stage \Sokil\Mongo\Pipeline\GroupStage */ $stage->setId('user.id')->sum('totalAmount', function ($expression) { /* @var $expression \Sokil\Mongo\Pipeline\Expression */ $expression->subtract(function ($expression) { $expression->multiply('$amount', 3.15); }, 0.95); }); }); $this->assertEquals('[{"$group":{"_id":"user.id","totalAmount":{"$sum":{"$subtract":[{"$multiply":["$amount",3.15]},0.95]}}}}]', (string) $pipeline); }
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']); }
public function testPipeline_MatchArray() { $pipeline = new Pipeline($this->collection); $pipeline->match(array('a' => 1, 'b' => array('$lt' => 12))); $this->assertEquals('[{"$match":{"a":1,"b":{"$lt":12}}}]', (string) $pipeline); }