Skip to content

MongoDB PHP 集成

MongoDB 提供了 PHP 驱动程序,允许我们在 PHP 应用程序中与 MongoDB 进行交互。通过 PHP 驱动程序,我们可以执行各种操作,如插入、查询、更新和删除数据等。

基本概念

PHP 驱动程序的类型

  1. MongoDB PHP Driver: 官方提供的 PHP 驱动程序。
  2. MongoDB ODM: 基于 MongoDB PHP Driver 的对象文档映射器,提供了更高级的 API。

在本章节中,我们将使用官方提供的 PHP 驱动程序。

连接到 MongoDB

要连接到 MongoDB,我们需要使用 MongoDB\Client 类。

php
<?php
require 'vendor/autoload.php';

use MongoDB\Client;

try {
    // 连接到 MongoDB 服务器
    $client = new Client('mongodb://localhost:27017');
    
    // 获取数据库
    $database = $client->mydatabase;
    
    echo "Connected to database successfully";
} catch (Exception $e) {
    echo $e->getMessage();
}
?>

插入数据

插入单个文档

php
<?php
require 'vendor/autoload.php';

use MongoDB\Client;

try {
    $client = new Client('mongodb://localhost:27017');
    $database = $client->mydatabase;
    $collection = $database->mycollection;
    
    // 创建文档
    $document = [
        'name' => 'John',
        'age' => 30,
        'email' => 'john@example.com',
        'status' => 'active'
    ];
    
    // 插入文档
    $collection->insertOne($document);
    
    echo "Document inserted successfully";
} catch (Exception $e) {
    echo $e->getMessage();
}
?>

插入多个文档

php
<?php
require 'vendor/autoload.php';

use MongoDB\Client;

try {
    $client = new Client('mongodb://localhost:27017');
    $database = $client->mydatabase;
    $collection = $database->mycollection;
    
    // 创建文档列表
    $documents = [
        [
            'name' => 'Jane',
            'age' => 25,
            'email' => 'jane@example.com',
            'status' => 'pending'
        ],
        [
            'name' => 'Bob',
            'age' => 35,
            'email' => 'bob@example.com',
            'status' => 'inactive'
        ]
    ];
    
    // 插入文档列表
    $collection->insertMany($documents);
    
    echo "Documents inserted successfully";
} catch (Exception $e) {
    echo $e->getMessage();
}
?>

查询数据

查询所有文档

php
<?php
require 'vendor/autoload.php';

use MongoDB\Client;

try {
    $client = new Client('mongodb://localhost:27017');
    $database = $client->mydatabase;
    $collection = $database->mycollection;
    
    // 查询所有文档
    $documents = $collection->find();
    
    // 遍历结果
    foreach ($documents as $document) {
        var_dump($document);
    }
} catch (Exception $e) {
    echo $e->getMessage();
}
?>

查询特定文档

php
<?php
require 'vendor/autoload.php';

use MongoDB\Client;

try {
    $client = new Client('mongodb://localhost:27017');
    $database = $client->mydatabase;
    $collection = $database->mycollection;
    
    // 查询特定文档
    $filter = ['name' => 'John'];
    $documents = $collection->find($filter);
    
    // 遍历结果
    foreach ($documents as $document) {
        var_dump($document);
    }
} catch (Exception $e) {
    echo $e->getMessage();
}
?>

更新数据

更新单个文档

php
<?php
require 'vendor/autoload.php';

use MongoDB\Client;
use MongoDB\Driver\BulkWrite;
use MongoDB\Driver\Manager;
use MongoDB\Driver\Query;

try {
    $client = new Client('mongodb://localhost:27017');
    $database = $client->mydatabase;
    $collection = $database->mycollection;
    
    // 更新单个文档
    $filter = ['name' => 'John'];
    $update = ['$set' => ['age' => 31]];
    $collection->updateOne($filter, $update);
    
    echo "Document updated successfully";
} catch (Exception $e) {
    echo $e->getMessage();
}
?>

更新多个文档

php
<?php
require 'vendor/autoload.php';

use MongoDB\Client;

try {
    $client = new Client('mongodb://localhost:27017');
    $database = $client->mydatabase;
    $collection = $database->mycollection;
    
    // 更新多个文档
    $filter = ['status' => 'active'];
    $update = ['$set' => ['status' => 'pending']];
    $collection->updateMany($filter, $update);
    
    echo "Documents updated successfully";
} catch (Exception $e) {
    echo $e->getMessage();
}
?>

删除数据

删除单个文档

php
<?php
require 'vendor/autoload.php';

use MongoDB\Client;

try {
    $client = new Client('mongodb://localhost:27017');
    $database = $client->mydatabase;
    $collection = $database->mycollection;
    
    // 删除单个文档
    $filter = ['name' => 'Bob'];
    $collection->deleteOne($filter);
    
    echo "Document deleted successfully";
} catch (Exception $e) {
    echo $e->getMessage();
}
?>

删除多个文档

php
<?php
require 'vendor/autoload.php';

use MongoDB\Client;

try {
    $client = new Client('mongodb://localhost:27017');
    $database = $client->mydatabase;
    $collection = $database->mycollection;
    
    // 删除多个文档
    $filter = ['status' => 'pending'];
    $collection->deleteMany($filter);
    
    echo "Documents deleted successfully";
} catch (Exception $e) {
    echo $e->getMessage();
}
?>

查询进阶

使用查询操作符

php
<?php
require 'vendor/autoload.php';

use MongoDB\Client;

try {
    $client = new Client('mongodb://localhost:27017');
    $database = $client->mydatabase;
    $collection = $database->mycollection;
    
    // 使用查询操作符
    $filter = [
        '$and' => [
            ['age' => ['$gt' => 25]],
            ['status' => 'active']
        ]
    ];
    $documents = $collection->find($filter);
    
    // 遍历结果
    foreach ($documents as $document) {
        var_dump($document);
    }
} catch (Exception $e) {
    echo $e->getMessage();
}
?>

排序和分页

php
<?php
require 'vendor/autoload.php';

use MongoDB\Client;

try {
    $client = new Client('mongodb://localhost:27017');
    $database = $client->mydatabase;
    $collection = $database->mycollection;
    
    // 排序和分页
    $documents = $collection->find(
        [],
        [
            'sort' => ['age' => -1],
            'skip' => 1,
            'limit' => 2
        ]
    );
    
    // 遍历结果
    foreach ($documents as $document) {
        var_dump($document);
    }
} catch (Exception $e) {
    echo $e->getMessage();
}
?>

总结

MongoDB PHP 驱动程序允许我们在 PHP 应用程序中与 MongoDB 进行交互。通过 PHP 驱动程序,我们可以执行各种操作,如插入、查询、更新和删除数据等。在使用 PHP 驱动程序时,我们应该注意连接管理、数据处理和错误处理等方面的问题,以确保应用程序的高效运行。