PHP 和 MongoDB - 快速指南


PHP 和 MongoDB - 概述

PHP 开发团队为 PHP 提供了 MongoDB 驱动程序,并拥有各种可用资源。

使用 PHP 连接 MongoDB 的第一步是在 php ext 目录中添加 mongodb PHP 驱动程序 dll,并在 php.ini 中启用它,然后使用 mongodb API 连接到数据库。

连接到 MongoDB 数据库

假设 MongoDB 安装在本地并使用默认端口,然后以下语法连接到 MongoDB 数据库。

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

MongoDB Driver Manager 是对 mongodb 数据库进行所有操作的中心类。要连接 mongodb 数据库,我们首先准备一个命令,然后执行它来连接数据库。

$statistics = new MongoDB\Driver\Command(["dbstats" => 1]);
$cursor = $manager->executeCommand("mydb", $statistics);

执行命令后,如果 mydb 数据库不存在,则会创建该数据库,否则将连接该数据库。

PHP 和 MongoDB - 环境设置

安装 MongoDB 数据库

使用MongoDB - 环境设置执行 MongoDB 安装步骤

安装PHP

使用 PHP 7 执行 PHP 安装步骤- 环境设置

PHP MongoDB 驱动程序

要将 MongoDB 与 PHP 结合使用,您需要使用 MongoDB PHP 驱动程序。从 URL下载 PHP 驱动程序下载驱动程序。请务必下载它的最新版本。现在解压缩存档并将 php_mongo.dll 放入 PHP 扩展目录(默认情况下为“ext”),并将以下行添加到 php.ini 文件中 -

extension = php_mongo.dll

如果是 Windows,请确保 libsasl.dll 在 Windows 的 PATH 中。该 dll 可在 PHP 安装目录中找到。

PHP 和 MongoDB - 连接数据库

执行任何操作的第一步是创建一个 Manager 实例。

// Connect to MongoDB using Manager Instance
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

第二步是在数据库上准备并执行命令,如果数据库不存在,MongoDB 会自动创建它。

// Create a Command Instance
$statistics = new MongoDB\Driver\Command(["dbstats" => 1]);

// Execute the command on the database
$cursor = $manager->executeCommand("myDb", $statistics);

例子

尝试以下示例连接到 MongoDB 服务器 -

将以下示例复制并粘贴为 mongodb_example.php -

<?php
   try {
      // connect to mongodb
      $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

      echo "Connection to database successfully";
      $statistics = new MongoDB\Driver\Command(["dbstats" => 1]);
      $cursor = $manager->executeCommand("myDb", $statistics);
      $statistics = current($cursor->toArray());
      echo "<pre>"; 
      print_r($statistics); 
      echo "</pre>";
   } catch (MongoDB\Driver\Exception\Exception $e) {	   
      echo "Exception:", $e->getMessage(), "\n";
   }
?>

输出

访问部署在 apache Web 服务器上的 mongodb_example.php 并验证输出。

Connection to database successfully
stdClass Object
(
   [db] => myDb
   [collections] => 0
   [views] => 0
   [objects] => 0
   [avgObjSize] => 0
   [dataSize] => 0
   [storageSize] => 0
   [totalSize] => 0
   [indexes] => 0
   [indexSize] => 0
   [scaleFactor] => 1
   [fileSize] => 0
   [fsUsedSize] => 0
   [fsTotalSize] => 0
   [ok] => 1
)

PHP 和 MongoDB - 显示数据库

执行任何操作的第一步是创建一个 Manager 实例。

// Connect to MongoDB using Manager Instance
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

第二步是在数据库上准备并执行命令以显示可用数据库的列表。

// Create a Command Instance
$databaseList = new MongoDB\Driver\Command(["listDatabases" => 1]);

// Execute the command on the database
$cursor = $manager->executeCommand("admin", $databaseList);

例子

尝试以下示例列出 MongoDB 服务器中默认可用的数据库 -

将以下示例复制并粘贴为 mongodb_example.php -

<?php
   try {
      // connect to mongodb
      $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

      // Create a Command Instance
      $databaseList = new MongoDB\Driver\Command(["listDatabases" => 1]);

      // Execute the command on the database
      $cursor = $manager->executeCommand("admin", $databaseList);
   
      $databases = current($cursor->toArray());
   
      foreach ($databases->databases as $database) {    
         echo $database->name . "<br/>";
      }
   } catch (MongoDB\Driver\Exception\Exception $e) {	   
      echo "Exception:", $e->getMessage(), "\n";
   }
?>

输出

访问部署在 apache Web 服务器上的 mongodb_example.php 并验证输出。

admin
config
local

PHP 和 MongoDB - 删除数据库

执行任何操作的第一步是创建一个 Manager 实例。

// Connect to MongoDB using Manager Instance
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

第二步是准备并执行删除数据库的命令。

// Create a Command Instance
$dropDatabase = new MongoDB\Driver\Command(["dropDatabase" => 1]);

// Execute the command on the database
$cursor = $manager->executeCommand("myDb", $dropDatabase);

例子

尝试以下示例来删除 MongoDB 服务器中的数据库 -

将以下示例复制并粘贴为 mongodb_example.php -

<?php
   try {
      // connect to mongodb
      $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

      // Create a Command Instance
      $dropDatabase = new MongoDB\Driver\Command(["dropDatabase" => 1]);

      // Execute the command on the database
      $cursor = $manager->executeCommand("myDb", $dropDatabase);
   
      echo "Database dropped."
   } catch (MongoDB\Driver\Exception\Exception $e) {	   
      echo "Exception:", $e->getMessage(), "\n";
   }
?>

输出

访问部署在 apache Web 服务器上的 mongodb_example.php 并验证输出。

Database dropped.

PHP 和 MongoDB - 创建集合

执行任何操作的第一步是创建一个 Manager 实例。

// Connect to MongoDB using Manager Instance
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

第二步是准备并执行命令来创建集合。

// Create a Command Instance
$createCollection = new MongoDB\Driver\Command(["create" => "sampleCollection"]);

// Execute the command on the database
$cursor = $manager->executeCommand("myDb", $createCollection);

例子

尝试以下示例在 MongoDB 服务器中创建集合 -

将以下示例复制并粘贴为 mongodb_example.php -

<?php
   try {
      // connect to mongodb
      $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

      // Create a Command Instance
      $createCollection = new MongoDB\Driver\Command(["create" => "sampleCollection"]);

      // Execute the command on the database
      $cursor = $manager->executeCommand("myDb", $createCollection);
   
      echo "Collection created.";
   } catch (MongoDB\Driver\Exception\Exception $e) {	   
      echo "Exception:", $e->getMessage(), "\n";
   }
?>

输出

访问部署在 apache Web 服务器上的 mongodb_example.php 并验证输出。

Collection created.

PHP 和 MongoDB - 删除集合

执行任何操作的第一步是创建一个 Manager 实例。

// Connect to MongoDB using Manager Instance
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

第二步是准备并执行删除集合的命令。

// Create a Command Instance
$createCollection = new MongoDB\Driver\Command(["drop" => "sampleCollection"]);

// Execute the command on the database
$cursor = $manager->executeCommand("myDb", $createCollection);

例子

尝试以下示例在 MongoDB 服务器中删除集合 -

将以下示例复制并粘贴为 mongodb_example.php -

<?php
   try {
      // connect to mongodb
      $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

      // Create a Command Instance
      $dropCollection = new MongoDB\Driver\Command(["drop" => "sampleCollection"]);

      // Execute the command on the database
      $cursor = $manager->executeCommand("myDb", $dropCollection);
   
      echo "Collection dropped."
   } catch (MongoDB\Driver\Exception\Exception $e) {	   
      echo "Exception:", $e->getMessage(), "\n";
   }
?>

输出

访问部署在 apache Web 服务器上的 mongodb_example.php 并验证输出。

Collection dropped.

PHP 和 MongoDB - 显示集合

执行任何操作的第一步是创建一个 Manager 实例。

// Connect to MongoDB using Manager Instance
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

第二步是在数据库上准备并执行命令以显示可用集合的列表。

// Create a Command Instance
$collectionList = new MongoDB\Driver\Command(["listCollections" => 1]);

// Execute the command on the database
$cursor = $manager->executeCommand("myDb", $collectionList);

例子

尝试以下示例列出 MongoDB 服务器中数据库的集合 -

将以下示例复制并粘贴为 mongodb_example.php -

<?php
   try {
      // connect to mongodb
      $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

      // Create a Command Instance
      $collectionList = new MongoDB\Driver\Command(["listCollections" => 1]);

      // Execute the command on the database
      $cursor = $manager->executeCommand("myDb", $collectionList);
   
      $collections = $cursor->toArray();
   
      foreach ($collections as $collection) {    
         echo $collection->name . "<br/>";
      }
   } catch (MongoDB\Driver\Exception\Exception $e) {	   
      echo "Exception:", $e->getMessage(), "\n";
   }
?>

输出

访问部署在 apache Web 服务器上的 mongodb_example.php 并验证输出。

sampleCollection

PHP 和 MongoDB - 插入文档

执行任何操作的第一步是创建一个 Manager 实例。

// Connect to MongoDB using Manager Instance
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

第二步是准备并执行一个bulkWrite 对象以在集合中插入记录。

// Create a BulkWrite Object
$bulk = new MongoDB\Driver\BulkWrite(['ordered' => true]);

$bulk->insert(['First_Name' => "Mahesh", 
	'Last_Name' => 'Parashar', 
	'Date_Of_Birth' => '1990-08-21',
	'e_mail' => 'mahesh_parashar.123@gmail.com',
	'phone' => '9034343345']);

// Execute the commands.
$result = $manager->executeBulkWrite('myDb.sampleCollection', $bulk);

例子

尝试以下示例在 MongoDB 服务器的集合中插入文档 -

将以下示例复制并粘贴为 mongodb_example.php -

<?php
   try {
      $bulk = new MongoDB\Driver\BulkWrite(['ordered' => true]);

      $bulk->insert(['First_Name' => "Mahesh", 
         'Last_Name' => 'Parashar', 
         'Date_Of_Birth' => '1990-08-21',
         'e_mail' => 'mahesh_parashar.123@gmail.com',
         'phone' => '9034343345']);

      $bulk->insert(['First_Name' => "Radhika", 
         'Last_Name' => 'Sharma', 
         'Date_Of_Birth' => '1995-09-26',
         'e_mail' => 'radhika_sharma.123@gmail.com',
         'phone' => '9000012345']);	

      $bulk->insert(['First_Name' => "Rachel", 
         'Last_Name' => 'Christopher', 
         'Date_Of_Birth' => '1990-02-16',
         'e_mail' => 'rachel_christopher.123@gmail.com',
         'phone' => '9000054321']);

      $bulk->insert(['First_Name' => "Fathima", 
         'Last_Name' => 'Sheik', 
         'Date_Of_Birth' => '1990-02-16',
         'e_mail' => 'fathima_sheik.123@gmail.com',
         'phone' => '9000012345']);

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

      $result = $manager->executeBulkWrite('myDb.sampleCollection', $bulk);

      printf("Inserted %d document(s).\n", $result->getInsertedCount());
   } catch (MongoDB\Driver\Exception\Exception $e) {	   
      echo "Exception:", $e->getMessage(), "\n";
   }
?>

输出

访问部署在 apache Web 服务器上的 mongodb_example.php 并验证输出。

Inserted 4 document(s).

PHP 和 MongoDB - 选择文档

执行任何操作的第一步是创建一个 Manager 实例。

// Connect to MongoDB using Manager Instance
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

第二步是准备并执行查询对象以选择集合中的记录。

// Create a Query Object
$query = new MongoDB\Driver\Query(['First_Name' => "Radhika"]);

// Execute the query
$rows = $manager->executeQuery("testdb.sampleCollection", $query);

例子

尝试以下示例来选择 MongoDB 服务器中的文档 -

将以下示例复制并粘贴为 mongodb_example.php -

<?php
   try {
      // connect to mongodb
      $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

      $filter = [];

      // Create a Query Object
      $query = new MongoDB\Driver\Query($filter);

      // Execute the query
      $rows = $manager->executeQuery("myDb.sampleCollection", $query);

      foreach ($rows as $row) {  
         printf("First Name: %s, Last Name: %s.<br/>", $row->First_Name, $row->Last_Name);   
      }
   } catch (MongoDB\Driver\Exception\Exception $e) {	   
      echo "Exception:", $e->getMessage(), "\n";
   }
?>

输出

访问部署在 apache Web 服务器上的 mongodb_example.php 并验证输出。

First Name: Radhika, Last Name: Sharma.
First Name: Rachel, Last Name: Christopher.
First Name: Fathima, Last Name: Sheik.

PHP 和 MongoDB - 更新文档

执行任何操作的第一步是创建一个 Manager 实例。

// Connect to MongoDB using Manager Instance
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

第二步是准备并执行一个bulkWrite 对象来更新集合中的记录。

// Create a BulkWrite Object
$bulk = new MongoDB\Driver\BulkWrite(['ordered' => true]);

$bulk->update(['First_Name' => "Mahesh"],['$set' => ['e_mail' => 'maheshparashar@gmail.com']]);

// Execute the commands.
$result = $manager->executeBulkWrite('myDb.sampleCollection', $bulk);

例子

尝试以下示例来更新 MongoDB 服务器中的文档 -

将以下示例复制并粘贴为 mongodb_example.php -

<?php
   try {
      $bulk = new MongoDB\Driver\BulkWrite(['ordered' => true]);

      $bulk->update(['First_Name' => "Mahesh"],['$set' => ['e_mail' => 'maheshparashar@gmail.com']]);

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

      $result = $manager->executeBulkWrite('myDb.sampleCollection', $bulk);

      printf("Updated %d document(s).\n", $result->getModifiedCount());
   } catch (MongoDB\Driver\Exception\Exception $e) {	   
      echo "Exception:", $e->getMessage(), "\n";
   }
?>

输出

访问部署在 apache Web 服务器上的 mongodb_example.php 并验证输出。

Updated 1 document(s).

PHP 和 MongoDB - 删除文档

执行任何操作的第一步是创建一个 Manager 实例。

// Connect to MongoDB using Manager Instance
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

第二步是准备并执行一个bulkWrite 对象来删除集合中的记录。

// Create a BulkWrite Object
$bulk = new MongoDB\Driver\BulkWrite(['ordered' => true]);

$bulk->delete(['First_Name' => "Mahesh"]);

// Execute the commands.
$result = $manager->executeBulkWrite('myDb.sampleCollection', $bulk);

例子

尝试以下示例来删除 MongoDB 服务器中集合的文档 -

将以下示例复制并粘贴为 mongodb_example.php -

<?php
   try {
      $bulk = new MongoDB\Driver\BulkWrite(['ordered' => true]);

      $bulk->delete(['First_Name' => "Mahesh"]);

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

      $result = $manager->executeBulkWrite('myDb.sampleCollection', $bulk);

      echo "Document deleted."
   } catch (MongoDB\Driver\Exception\Exception $e) {	   
      echo "Exception:", $e->getMessage(), "\n";
   }
?>

输出

访问部署在 apache Web 服务器上的 mongodb_example.php 并验证输出。

Document deleted.

PHP 和 MongoDB - 插入嵌入文档

执行任何操作的第一步是创建一个 Manager 实例。

// Connect to MongoDB using Manager Instance
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

第二步是准备并执行一个bulkWrite 对象,以在集合中插入带有嵌入文档的记录。

// Create a BulkWrite Object
$bulk = new MongoDB\Driver\BulkWrite(['ordered' => true]);

$bulk->insert(['title' => "MongoDB Overview", 
   'description' => 'MongoDB is no SQL database', 
   'by' => 'tutorials point',
   'url' => 'http://www.tutorialspoint.com',
   'comments' => [
      ['user' => "user1", 'message' => "My First Comment", 'dateCreated' => "20/2/2020", 'like' => 0],
      ['user' => "user2", 'message' => "My Second Comment", 'dateCreated' => "20/2/2020", 'like' => 0],
   ]]);

// Execute the commands.
$result = $manager->executeBulkWrite('myDb.sampleCollection', $bulk);

例子

尝试以下示例在 MongoDB 服务器的集合中插入带有嵌入文档的文档 -

将以下示例复制并粘贴为 mongodb_example.php -

<?php
   try {
	  // connect to mongodb
      $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
	  
      $bulk = new MongoDB\Driver\BulkWrite(['ordered' => true]);

      $bulk->insert(['title' => "MongoDB Overview", 
         'description' => 'MongoDB is no SQL database', 
         'by' => 'tutorials point',
         'url' => 'http://www.tutorialspoint.com',
         'comments' => [
		 ['user' => "user1", 'message' => "My First Comment", 'dateCreated' => "20/2/2020", 'like' => 0],
		 ['user' => "user2", 'message' => "My Second Comment", 'dateCreated' => "20/2/2020", 'like' => 0],
		 ]]);

      $result = $manager->executeBulkWrite('myDb.sampleCollection', $bulk);

      printf("Inserted %d document(s).\n", $result->getInsertedCount());
   } catch (MongoDB\Driver\Exception\Exception $e) {	   
      echo "Exception:", $e->getMessage(), "\n";
   }
?>

输出

访问部署在 apache Web 服务器上的 mongodb_example.php 并验证输出。

Inserted 1 document(s).

PHP 和 MongoDB - 错误处理

MongoDB 驱动程序操作在任何数据库操作的情况下都会引发异常,并且可以使用以下语法轻松捕获异常:

try {

} catch (MongoDB\Driver\Exception\Exception $e) {	   
   echo "Exception:", $e->getMessage(), "<br/>";
   echo "File:", $e->getFile(), "<br/>";
   echo "Line:", $e->getLine(), "<br/>";    
}

例子

尝试以下示例来检查 MongoDB 服务器中的数据库操作错误 -

将以下示例复制并粘贴为 mongodb_example.php -

<?php
   try {
	  // connect to mongodb
      $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
	   
      // Create a Command Instance
      $createCollection = new MongoDB\Driver\Command(["create" => "sampleCollection"]);

      // Execute the command on the database
      $cursor = $manager->executeCommand("myDb", $createCollection);
   
      echo "Collection created.";
   } catch (MongoDB\Driver\Exception\Exception $e) {	   
      echo "Exception:", $e->getMessage(), "<br/>";
      echo "File:", $e->getFile(), "<br/>";
      echo "Line:", $e->getLine(), "<br/>";
   }
?>

输出

访问部署在 apache Web 服务器上的 mongodb_example.php 并验证输出。

Exception:Collection already exists. NS: myDb.sampleCollection
File: \htdocs\php_mongodb\mongodb_example.php
Line:10

PHP 和 MongoDB - 限制记录

执行任何操作的第一步是创建一个 Manager 实例。

// Connect to MongoDB using Manager Instance
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

第二步是准备并执行一个查询对象来记录集合中的内容,并向其传递过滤器和选项以限制搜索结果。

$filter = [];
$options = ['limit' => 1];
// Create a Query Object
$query = new MongoDB\Driver\Query($filter, $options);

// Execute the query
$rows = $manager->executeQuery("testdb.sampleCollection", $query);

例子

尝试以下示例来限制 MongoDB 服务器中的搜索结果 -

将以下示例复制并粘贴为 mongodb_example.php -

<?php
   try {
      // connect to mongodb
      $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

      $filter = [];
	  $options = ['limit' => 1];

      // Create a Query Object
      $query = new MongoDB\Driver\Query($filter, $options);

      // Execute the query
      $rows = $manager->executeQuery("myDb.sampleCollection", $query);

      foreach ($rows as $row) {  
         printf("First Name: %s, Last Name: %s.<br/>", $row->First_Name, $row->Last_Name);   
      }
   } catch (MongoDB\Driver\Exception\Exception $e) {	   
      echo "Exception:", $e->getMessage(), "\n";
   }
?>

输出

访问部署在 apache Web 服务器上的 mongodb_example.php 并验证输出。

First Name: Radhika, Last Name: Sharma.

PHP 和 MongoDB - 记录排序

执行任何操作的第一步是创建一个 Manager 实例。

// Connect to MongoDB using Manager Instance
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

第二步是准备并执行查询对象以选择集合中的记录并向其传递过滤器和选项以对记录进行排序。

$filter = [];

// Sort in Descending Order, For ascending order pass 1
$options = ['sort' => ['First_Name' => -1]];
// Create a Query Object
$query = new MongoDB\Driver\Query($filter, $options);

// Execute the query
$rows = $manager->executeQuery("testdb.sampleCollection", $query);

例子

尝试以下示例来限制 MongoDB 服务器中的搜索结果 -

将以下示例复制并粘贴为 mongodb_example.php -

<?php
   try {
      // connect to mongodb
      $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

      $filter = [];
      $options = ['limit' => 3, 'sort' => ['First_Name' => -1]];

      // Create a Query Object
      $query = new MongoDB\Driver\Query($filter, $options);

      // Execute the query
      $rows = $manager->executeQuery("myDb.sampleCollection", $query);

      foreach ($rows as $row) {  
         printf("First Name: %s, Last Name: %s.<br/>", $row->First_Name, $row->Last_Name);   
      }
   } catch (MongoDB\Driver\Exception\Exception $e) {	   
      echo "Exception:", $e->getMessage(), "\n";
   }
?>

输出

访问部署在 apache Web 服务器上的 mongodb_example.php 并验证输出。

First Name: Radhika, Last Name: Sharma.
First Name: Rachel, Last Name: Christopher.
First Name: Fathima, Last Name: Sheik.