Commit d42a942a by Paul Klimov

Mongo Command 'update' and 'insertBatch' methods added.

parent 4f5f5bb6
...@@ -79,6 +79,51 @@ class Collection extends Object ...@@ -79,6 +79,51 @@ class Collection extends Object
} }
/** /**
* Inserts several new rows into collection.
* @param array $rows array of arrays or objects to be inserted.
* @param array $options list of options in format: optionName => optionValue.
* @return array inserted data, each row will have "_id" key assigned to it.
* @throws Exception on failure.
*/
public function batchInsert($rows, $options = [])
{
$token = 'Inserting batch data into ' . $this->mongoCollection->getName();
Yii::info($token, __METHOD__);
try {
Yii::beginProfile($token, __METHOD__);
$this->tryResultError($this->mongoCollection->batchInsert($rows, $options));
Yii::endProfile($token, __METHOD__);
return $rows;
} catch (\Exception $e) {
Yii::endProfile($token, __METHOD__);
throw new Exception($e->getMessage(), (int)$e->getCode(), $e);
}
}
/**
* Updates the rows, which matches given criteria by given data.
* @param array $criteria description of the objects to update.
* @param array $newData the object with which to update the matching records.
* @param array $options list of options in format: optionName => optionValue.
* @return boolean whether operation was successful.
* @throws Exception on failure.
*/
public function update($criteria, $newData, $options = [])
{
$token = 'Updating data in ' . $this->mongoCollection->getName();
Yii::info($token, __METHOD__);
try {
Yii::beginProfile($token, __METHOD__);
$this->mongoCollection->update($criteria, $newData, $options);
Yii::endProfile($token, __METHOD__);
return true;
} catch (\Exception $e) {
Yii::endProfile($token, __METHOD__);
throw new Exception($e->getMessage(), (int)$e->getCode(), $e);
}
}
/**
* Update the existing database data, otherwise insert this data * Update the existing database data, otherwise insert this data
* @param array|object $data data to be updated/inserted. * @param array|object $data data to be updated/inserted.
* @param array $options list of options in format: optionName => optionValue. * @param array $options list of options in format: optionName => optionValue.
......
...@@ -91,7 +91,7 @@ class Query extends Component implements QueryInterface ...@@ -91,7 +91,7 @@ class Query extends Component implements QueryInterface
if (!empty($this->orderBy)) { if (!empty($this->orderBy)) {
$sort = []; $sort = [];
foreach ($this->orderBy as $fieldName => $sortOrder) { foreach ($this->orderBy as $fieldName => $sortOrder) {
$sort[$fieldName] = $sortOrder === SORT_DESC ? -1 : 1; $sort[$fieldName] = $sortOrder === SORT_DESC ? \MongoCollection::DESCENDING : \MongoCollection::ASCENDING;
} }
$cursor->sort($this->orderBy); $cursor->sort($this->orderBy);
} }
......
...@@ -15,6 +15,13 @@ class CollectionTest extends MongoTestCase ...@@ -15,6 +15,13 @@ class CollectionTest extends MongoTestCase
// Tests : // Tests :
public function testFind()
{
$collection = $this->getConnection()->getCollection('customer');
$cursor = $collection->find();
$this->assertTrue($cursor instanceof \MongoCursor);
}
public function testInsert() public function testInsert()
{ {
$collection = $this->getConnection()->getCollection('customer'); $collection = $this->getConnection()->getCollection('customer');
...@@ -44,6 +51,28 @@ class CollectionTest extends MongoTestCase ...@@ -44,6 +51,28 @@ class CollectionTest extends MongoTestCase
$this->assertEquals($id, $rows[0]['_id']); $this->assertEquals($id, $rows[0]['_id']);
} }
/**
* @depends testFind
*/
public function testBatchInsert()
{
$collection = $this->getConnection()->getCollection('customer');
$rows = [
[
'name' => 'customer 1',
'address' => 'customer 1 address',
],
[
'name' => 'customer 2',
'address' => 'customer 2 address',
],
];
$insertedRows = $collection->batchInsert($rows);
$this->assertTrue($insertedRows[0]['_id'] instanceof \MongoId);
$this->assertTrue($insertedRows[1]['_id'] instanceof \MongoId);
$this->assertEquals(count($rows), $collection->find()->count());
}
public function testSave() public function testSave()
{ {
$collection = $this->getConnection()->getCollection('customer'); $collection = $this->getConnection()->getCollection('customer');
...@@ -59,7 +88,7 @@ class CollectionTest extends MongoTestCase ...@@ -59,7 +88,7 @@ class CollectionTest extends MongoTestCase
/** /**
* @depends testSave * @depends testSave
*/ */
public function testUpdate() public function testUpdateBySave()
{ {
$collection = $this->getConnection()->getCollection('customer'); $collection = $this->getConnection()->getCollection('customer');
$data = [ $data = [
...@@ -93,4 +122,25 @@ class CollectionTest extends MongoTestCase ...@@ -93,4 +122,25 @@ class CollectionTest extends MongoTestCase
$rows = $collection->findAll(); $rows = $collection->findAll();
$this->assertEquals(0, count($rows)); $this->assertEquals(0, count($rows));
} }
/**
* @depends testFindAll
*/
public function testUpdate()
{
$collection = $this->getConnection()->getCollection('customer');
$data = [
'name' => 'customer 1',
'address' => 'customer 1 address',
];
$id = $collection->insert($data);
$newData = [
'name' => 'new name'
];
$collection->update(['_id' => $id], $newData);
list($row) = $collection->findAll();
$this->assertEquals($newData['name'], $row['name']);
}
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment