Работа библиотеки PHP с драйвером MongoDB (PHPLIB)

После первоначальной настройки модуля продолжится объяснение того, как начать работу с соответствующей пользовательской библиотекой для написания первого проекта.

Установка библиотеки PHP через Composer

Последнее, что необходимо установить перед тем, как начать писать приложение, — это библиотека PHP.

Библиотеку будем устанавливать через пакетный менеджер » Composer. Инструкции по установке Composer на разные платформы опубликованы на его сайте.

Библиотеку устанавливают так:

$ composer require mongodb/mongodb

Будет выведено что-то вроде:

./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing mongodb/mongodb (1.0.0)
    Downloading: 100%

Writing lock file
Generating autoload files

Composer создаст несколько файлов: composer.json, composer.lock и директорию vendor, содержащую саму библиотеку и другие зависимости, которые потребуются в проекте.

Работа с библиотекой PHP

Кроме управления зависимостями, Composer также содержит автозагрузчик классов для этих зависимостей. Необходимо убедиться, что этот автозагрузчик включён в начало скрипта или в код начальной загрузки приложения:

<?php
// Этот путь должен указывать на автозагрузчик Composer
require 'vendor/autoload.php';

После этого можно использовать библиотеку как описано » в документации.

Если ранее приходилось работать с драйвером MongoDB в других языках, API библиотеки будет выглядеть знакомым. Он содержит класс » Client для соединения с MongoDB, класс » Database для операций уровня базы данных (например, команды, управление коллекциями) и класс » Collection для операций уровня коллекций (например, операций » CRUD, управление индексами).

Например, вот как вставить документ в коллекцию beers базы данных demo:

<?php
require 'vendor/autoload.php'; // подключаем автозагрузчик классов Composer

$client = new MongoDB\Client("mongodb://localhost:27017");
$collection = $client->demo->beers;

$result = $collection->insertOne( [ 'name' => 'Hinterland', 'brewery' => 'BrewDog' ] );

echo
"Идентификатор вставленного документа '{$result->getInsertedId()}'";
?>

Поскольку вставленный документ не содержал поля _id, модуль сгенерирует объект MongoDB\BSON\ObjectId, чтобы сервера использовал его как _id. Это значение также становится доступно вызывающей стороне через результирующий объект, который возвращается методом insertOne.

После вставки можно запросить только что вставленные данные. Для этого вызывают метод find, который возвращает итерируемый курсор:

<?php

require 'vendor/autoload.php'; // Подключаем автозагрузчик классов Composer

$client = new MongoDB\Client("mongodb://localhost:27017");
$collection = $client->demo->beers;

$result = $collection->find(['name' => 'Hinterland', 'brewery' => 'BrewDog']);

foreach (
$result as $entry) {
echo
$entry['_id'], ': ', $entry['name'], "\n";
}

?>

Хотя примеры не всегда добавляют очевидности, но BSON-документы и BSON-массивы по умолчанию не сериализуются как специальные классы в библиотеке. Эти классы расширяют класс ArrayObject для удобства и реализуют интерфейсы модуля MongoDB\BSON\Serializable и MongoDB\BSON\Unserializable, чтобы гарантировать, что значения сохраняют тип при сериализации обратно в BSON. Это помогает избежать предостережения в устаревшем модуле mongo, в котором массивы могли превращаться в документы и наоборот. Дополнительную информацию о преобразовании значений между PHP и BSON даёт спецификация Сохранение данных.