Использование библиотеки PHP для MongoDB (PHPLIB)

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

Установка библиотеки 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 также предоставляет автоподгрузчик классов для этих зависимостей. Убедитесь, что вы включили этьот автозагрузчик в начало своего скрипта или в код bootstrap() вашего приложения:

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

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

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

Пример, как вставить документ в коллекцию 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 во входящий документ (как это делалось в старых версиях драйвера), теперь можно это делать с помощью метода 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 для большего удобства использования. Более подробно о сериализации и десериализации между переменными PHP и BSON можно прочитать в спецификации Постоянные данные.