php7 阿里云mongodb,PHP7使用 MongoDB\Driver\Manager 类实现简单的增删改查操作

2023-05-16

PHP7使用 MongoDB\Driver\Manager 类实现简单的增删改查操作

MongoDB 是一个由 C++ 语言编写的,基于分布式文件存储的数据库。官方号称是“现代应用程序中最流行的数据库”(The most popular database for modern apps)。

今天,我们 PHP7 使用 MongoDB\Driver\Manager 类来演示一下简单的增删改查操作。

查看 MongoDB 扩展文档,主要有一下几组类:

MongoDB\Driver // MongoDB驱动类

MongoDB\BSON // BSON 类型与序列化函数

MongoDB\Driver\Monitoring // 监控

MongoDB\Driver\Exception // 异常

基本操作用的都是 MongoDB\Driver 下的操作类:

MongoDB\Driver\Manager // 入口类,负责维护与MongoDB的连接,执行读写和命令

MongoDB\Driver\BulkWrite // 收集要发送到服务器的一个或多个插入、更新、删除等操作

MongoDB\Driver\Query // 构造查询对象

MongoDB\Driver\Cursor // 封装MongoDB命令或查询的结果

MongoDB\Driver\WriteResult // 封装执行结果

准备

首先确保已经安装好了 php-mongodb 扩展。

$ php -m |grep mongodb

mongodb

查看当前 PHP 版本:

$ php -v

PHP 7.4.0beta4 (cli) (built: Aug 28 2019 11:41:49) ( NTS )

Copyright (c) The PHP Group

Zend Engine v3.4.0-dev, Copyright (c) Zend Technologies

with Zend OPcache v7.4.0beta4, Copyright (c), by Zend Technologies

创建一个 MongoDB 连接:

创建一个 mongodb.php 文件

// 连接 MongoDB 数据库

$manager = new MongoDB\Driver\Manager("mongodb://192.168.10.10:27017");

var_dump($manager);

如果连接正常会返回如下结果:

$ php mongodb.php

object(MongoDB\Driver\Manager)#1 (2) {

["uri"]=> string(29) "mongodb://192.168.10.10:27017"

["cluster"]=> array(1) {

[0]=> array(10) {

["host"]=> string(13) "192.168.10.10"

["port"]=> int(27017)

["type"]=> int(1)

["is_primary"]=> bool(false)

["is_secondary"]=> bool(false)

["is_arbiter"]=> bool(false)

["is_hidden"]=> bool(false)

["is_passive"]=> bool(false)

["last_is_master"]=> array(10) {

["ismaster"]=> bool(true)

["maxBsonObjectSize"]=> int(16777216)

["maxMessageSizeBytes"]=> int(48000000)

["maxWriteBatchSize"]=> int(100000)

["localTime"]=> object(MongoDB\BSON\UTCDateTime)#2 (1) {

["milliseconds"]=> string(13) "1592379129886"

}

["logicalSessionTimeoutMinutes"]=> int(30)

["minWireVersion"]=> int(0)

["maxWireVersion"]=> int(7)

["readOnly"]=> bool(false)

["ok"]=> float(1)

}

["round_trip_time"]=> int(0)

}

}

}

如果连接了一个不存在的地址,会返回如下结果。因为不管连接的地址存不存在,都会返回一个MongoDB\Driver\Manager对象:

$ php mongodb.php

object(MongoDB\Driver\Manager)#1 (2) {

["uri"]=> string(30) "mongodb://192.168.10.102:27017"

["cluster"]=> array(0) { }

}

增:插入一些数据

使用 MongoDB\Driver\BulkWrite 类进行操作:

英文单词 bulk 大量 + write 写,就是大量的写入,即进行批量写入操作(insert, update, delete)。

$manager = new MongoDB\Driver\Manager("mongodb://192.168.10.10:27017");

$bulk = new MongoDB\Driver\BulkWrite();

$id1 = $bulk->insert([

'product_id' => 101,

'product_name' => '俱乐部全犬种成犬粮天然健康狗粮10kg',

'product_price' => 269.00,

'created_at' => new MongoDB\BSON\UTCDateTime(),

]);

$id2 = $bulk->insert([

'product_id' => 102,

'product_name' => '泰迪成犬粮专用狗粮2.5kg',

'product_price' => 245.00,

'created_at' => new MongoDB\BSON\UTCDateTime(),

]);

$id3 = $bulk->insert([

'product_id' => 103,

'product_name' => '中小型成犬粮牛肉蔬菜狗粮500g',

'product_price' => 14.00,

'created_at' => new MongoDB\BSON\UTCDateTime(),

]);

var_dump('--> ID 1 是: ' . $id1);

var_dump('--> ID 2 是: ' . $id2);

var_dump('--> ID 3 是: ' . $id3);

try {

$result = $manager->executeBulkWrite('testdb.products', $bulk);

var_dump($result->getInsertedCount());

} catch (MongoDB\Driver\Exception\BulkWriteException $e) {

var_dump($e->getWriteResult()->getWriteErrors());

}

例子中 testdb.products, 是指定操作 testdb 数据库中的 products 集合(类似与MySQL的表)。

例子中使用 MongoDB\BSON\UTCDateTime() 来生成 UTC 时间:

ISODate("2020-06-17T07:32:09.885Z")

MongoDB\BSON\UTCDateTime Object(

[milliseconds] => 1592379129885

)

执行返回结果如下:

$ php mongodb.php

string(40) "--> ID 1 是: 5ee9c6f993d70221cc0dc56b"

string(40) "--> ID 2 是: 5ee9c6f993d70221cc0dc56c"

string(40) "--> ID 3 是: 5ee9c6f993d70221cc0dc56d"

int(3)

查:执行查询操作

使用 MongoDB\Driver\Query 进行查询操作

$manager = new MongoDB\Driver\Manager("mongodb://192.168.10.10:27017");

$filter = ['product_price' => ['$gt' => 100]];

$options = [

'projection' => ['_id' => 0],

'sort' => ['product_price' => 1],

];

$query = new MongoDB\Driver\Query($filter, $options);

$cursor = $manager->executeQuery('testdb.products', $query);

foreach ($cursor as $document) {

print_r($document);

}

查询结果如下:

$ php mongodb.php

stdClass Object (

[product_id] => 102

[product_name] => 泰迪成犬粮专用狗粮2.5kg

[product_price] => 245

[created_at] => MongoDB\BSON\UTCDateTime Object (

[milliseconds] => 1592379129885

)

)

stdClass Object (

[product_id] => 101

[product_name] => 俱乐部全犬种成犬粮天然健康狗粮10kg

[product_price] => 269

[created_at] => MongoDB\BSON\UTCDateTime Object(

[milliseconds] => 1592379129885

)

)

更新与删除操作

更新与删除依然使用 MongoDB\Driver\BulkWrite 进行操作:

$manager = new MongoDB\Driver\Manager("mongodb://192.168.10.10:27017");

$bulk = new MongoDB\Driver\BulkWrite();

// 修改 update

$filters = ['product_id' => 103];

$sets = ['$set' => ['product_price' => 111.22]];

$updateOptions = ['multi' => false, 'upsert' => false];

$bulk->update($filters, $sets, $updateOptions);

// 删除 delete

$filters = ['product_id' => 101];

$bulk->delete($filters);

try {

$result = $manager->executeBulkWrite('testdb.products', $bulk);

var_dump('修改影响的条数: ' . $result->getModifiedCount());

var_dump('删除影响的条数: ' . $result->getDeletedCount());

} catch (MongoDB\Driver\Exception\BulkWriteException $e) {

var_dump($e->getWriteResult()->getWriteErrors());

}

操作返回结果如下:

$ php mongodb.php

string(24) "修改影响的条数: 1"

string(24) "删除影响的条数: 1"

请使用推荐的类库进行操作

以上内容仅演示如何使用 php mongodb 扩展进行简单的增删改查操作。

如果真要再项目中使用 PHP 进行 MongoDB 操作,还是需要使用一些封装好的 PHP 类库。

(1) MongoDB PHP Library

该类库是 MongoDB 自己出品的操作类。 The MongoDB PHP Library is a high-level abstraction for the MongoDB PHP driver.

$ composer require mongodb/mongodb

(2) 如果是 Laravel/Lumen 项目,可以使用:jenssegers/laravel-mongodb

该类库对 mongodb/mongodb 进行了封装,能与 Laravel/Lumen 进行更好的融合,可以使用 Laravel/Lumen 封装好的查询构造器,方便操作。

$ composer require jenssegers/mongodb

参考链接

[END]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php7 阿里云mongodb,PHP7使用 MongoDB\Driver\Manager 类实现简单的增删改查操作 的相关文章

随机推荐