一、安装PHP7
1.1 安装PHP7
参考《PHP安装(CentOS)》
二、安装PHP7驱动
2.1 安装PECL
官网:https://docs.mongodb.com/drivers/
下载:wget http://pear.php.net/go-pear.phar
安装:php go-pear.phar
2.2 安装驱动
pecl install mongodb
2.3 配置/etc/php.ini
vi /etc/php.ini
extension=mongodb.so
三、PHP代码连接测试
3.1 编写测试代码
<?php
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->insert(['name' => 'name1', 'age' => 21]);
$bulk->insert(['name' => 'name2', 'age' => 22]);
$bulk->insert(['name' => 'name3', 'age' => 23]);
$bulk->insert(['name' => 'name4', 'age' => 24]);
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);//可选,修改确认
$res = $manager->executeBulkWrite('chp.testdb', $bulk, $writeConcern);
echo 'Insert=';
print_r($res);
$query = new MongoDB\Driver\Query(['age' => 21], ['sort' => ['age' => 1]]);
$cursor = $manager->executeQuery('chp.testdb', $query);
$data = [];
foreach($cursor as $doc) {
$data[] = $doc;
}
echo 'Query=';
print_r($data);
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->update(
['name' => 'name2'],
['$set' => ['age' => 32, 'promise' => 'always smile!']]
);
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);//可选,修改确认
$res = $manager->executeBulkWrite('chp.testdb', $bulk, $writeConcern);
echo 'Modify=';
print_r($res);
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->delete(['name' => 'name3']);
$bulk->delete(['name' => 'name4']);
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);//可选,修改确认
$res = $manager->executeBulkWrite('chp.testdb', $bulk, $writeConcern);
echo 'Delete=';
print_r($res);
3.2 运行结果
3.3 多并发下插入键值相同情况
默认情况下:_id字段为MongoDB自带的唯一值索引字段;
为了不重复,需要先判断查询相同键是否存在,存在则更新,否则插入,但是这种情况对多并发不好使;
多并发时,设置索引
# 单个字段唯一索引
db.collection.createIndex({name:1},{unique:true}
如需要多个字段联合唯一索引,可参照如下方式:
# 多个字段联合索引示例
db.collection.createIndex({name_one:1,name_two:1},{unique:true})
设置索引后,并发情况下,就可以直接插入,如果当前索引字段name不存在,则会插入成功,若已经存在,则会捕捉异常并执行更新操作。即使在并发情况下,由于唯一索引机制,也不会出现同时插入相同文档的结果,并发下插入失败的的操作将会重新进行后续的更新操作。这样既提高了MongoDB的写入的效率也解决了并发下重复数据的问题。