MongoDB, пример веб-приложения

Материал из sysadm
Перейти к навигации Перейти к поиску

Установка модуля mongodb для PHP

Операционная система: Oracle Linux 8.6 Веб-сервер: nginx + php-fpm База данных: mongodb 5.0.8

su root

dnf install make
dnf install php-devel
dnf install php-pear
dnf install php-json

# если нет прямого подключения к интернету, то подключаем через прокси
export http_proxy=http://proxy:3128
export https_proxy=http://proxy:3128

# установка php драйвера для mongodb
pecl install mongodb

# проверка, что файл mongodb.so создан
ls -lh /usr/lib64/php/modules

# корректируем, как у остальных модулей
chmod +x /usr/lib64/php/modules/mongodb.so

# создаем файл для включения модуля
echo 'extension=mongodb' | tee /etc/php.d/30-mongodb.ini

# разрешаем сетевое подключение к базе данных для веб-сервера
setsebool -P httpd_can_network_connect on

systemctl restart php-fpm
systemctl restart nginx

# проверяем нет ли ошибки загрузки модуля
cat /var/log/messages | grep mongodb

# проверяем в phpinfo наличие модуля mongodb
echo '<?php phpinfo() ?>' | tee /var/www/<myhost>/phpinfo.php
http://<myhost>/phpinfo.php

Создание и наполнение базы test

mongo

use test
db.items.insert({ name: 'eggs', quantity: 10, price: 1.50 })
db.items.insert({ name: 'bacon', quantity: 3, price: 3.50, saled: '1.07.2022' })
db.items.insert({ name: 'tomatoes', quantity: 30, price: 0.50 })
quit()

Веб-приложение


<?php
  // включение отображения ошибок
  error_reporting(-1);
  ini_set('display_errors', 'On');

  // проверка модуля
  echo extension_loaded("mongodb") ? "loaded<br/>" : "not loaded<br/>";

  // подключение к mongodb
  echo '<hr>';
  $manager = new MongoDB\Driver\Manager("mongodb://127.0.0.1:27017");
  var_dump($manager) . '<br/>';
  echo '<hr>';

  $filter  = array();
  $options = array();
  $query = new MongoDB\Driver\Query($filter, $options);
  $cursor = $manager->executeQuery('test.items', $query);
  $result = $cursor -> toArray();

  foreach ($result as $obj){
    echo $obj->name . ', ' . $obj->quantity . ', ' . $obj->price;
    // метим звездочкой, если запись содержит атрибут saled
    if ( property_exists($obj,'saled') ) {
      echo ' * ';
    }
    echo '<br/>';
  }

  echo '<hr>';

  // quantity < 20
  $filter  = array("quantity" => array('$lt' => 20));
  $options = array();
  $query = new MongoDB\Driver\Query($filter, $options);
  $cursor = $manager->executeQuery('test.items', $query);

  $iterator = new IteratorIterator($cursor);
  $iterator->rewind();

  while($doc = $iterator->current()) {
    echo $doc->name . ', ' . $doc->quantity . '<br/>';
    $iterator->next();
  }

?>