Статьи

Начало работы с MongoLab: часть 2

В первой статье о MongoLab я показал вам, как настроить MongoDB для локальной разработки и MongoLab, сервис PaaS, созданный специально для обработки удаленных развертываний базы данных MongoDB.

В этой статье я собираюсь показать вам, как беспрепятственно работать с MongoLab, чтобы продолжить создание простого PHP-приложения, использующего базу данных MongoDB, размещенную на MongoLab.

Я также собираюсь показать вам лучший способ подключения к MongoLab с вашего собственного компьютера. Это устраняет необходимость вообще запускать локальный экземпляр MongoDB.

Улучшено подключение к MongoDB

Кажется, есть проблема с MongDB, где параметры соединения по умолчанию установлены для localhost. Это означает, что, как показано в первой статье, он должен быть запущен, а затем установить соединение с MongoLab через оболочку.

Изменение процесса установки на вашем компьютере для MongoDB решает проблему. На моем Mac я использовал популярный менеджер пакетов HomeBrew для установки MongoDB.

После того, как вы установили HomeBrew, это просто вопрос запуска:

brew install mongodb

из терминала приложение. Обязательно обратите внимание на то, что появляется после завершения установки — здесь приведена очень полезная информация. Я включу это здесь для справки:

 ==> Caveats
If this is your first install, automatically load on login   with:
mkdir -p ~/Library/LaunchAgents
cp /usr/local/Cellar/mongodb/2.0.3-x86_64/homebrew.mxcl.mongodb.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist

If this is an upgrade and you already have the homebrew.mxcl.mongodb.plist loaded:
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
cp /usr/local/Cellar/mongodb/2.0.3-x86_64/homebrew.mxcl.mongodb.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist

Or start it manually:
mongod run --config /usr/local/Cellar/mongodb/2.0.3-x86_64/mongod.conf

The launchctl plist above expects the config file to be at /usr/local/etc/mongod.conf.
If this is a first install, you can copy one from /usr/local/Cellar/mongodb/2.0.3-x86_64/mongod.conf:
cp /usr/local/Cellar/mongodb/2.0.3-x86_64/mongod.conf /usr/local/etc/mongod.conf
==> Summary

А как насчет пользователей Windows?

Рекомендуемый способ установки MongoDB для Windows — через готовые двоичные файлы . Это обеспечит те же возможности, которые описаны в этой статье.

Я на Linux, что мне делать?

На сайте MongoDB есть конкретные советы для популярных дистрибутивов Linux.

Подключение к MongoLab

Я собираюсь предположить, что у вас есть учетная запись, настроенная, как описано в части 1. Если у вас есть, то вы можете перейти в окно консоли / терминала и ввести эту команду (находится в окне базы данных вашей учетной записи MongoLab):

 mongo youraccount.mongolab.com:31347/your_database -u <user> -p <password>

Вы будете подключены непосредственно к базе данных, которую вы разместили в облаке на MongoLab. обратно в консоли / тип терминала:

 show collections

Это представит список коллекций, которые у вас есть в вашей базе данных. Помните, что коллекция примерно эквивалентна таблице базы данных в языке MongoDB.

Так что теперь у нас есть прямое соединение с нашей базой данных MongoLab, поэтому мы продолжим создавать наше маленькое приложение.

Добавление задач

Так что, если вы будете следовать предыдущей статье, у вас будет основной список задач, отображаемый в вашем браузере. Задачи читаются из нашей базы данных MongoLab, но мы можем работать с данными так же, как если бы мы использовали localhost.

Мы можем добавлять документы через веб-интерфейс MongoLab:

добавление документа - MongoLab

Или вы можете установить один из инструментов GUI, доступных для MongoDB:

Это еще одна приятная особенность MongoLab. Возможность подключения к облачной службе означает, что вы можете сделать то же самое из графического интерфейса, указанного выше:

MongoHub

Время для кода

Мы остановились в прошлый раз с отображением списка задач. Было бы хорошо, если бы мы могли добавить задачу через PHP, используя простую веб-форму. Создайте в проекте новый файл с именем «create.php», а затем добавьте в него простую форму:

 <!DOCTYPE html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Add a task</title>
    <link type="text/css" rel="stylesheet" href="" />
    <!--[if lt IE 9]>
        <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
</head>
<body>
    <h1>Task Creator</h1>
    <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
        <h3>Title</h3>
        <p><input type="text" name="title" id="title" /></p>
        <h3>Status</h3>
        <p><input type="text" name="status" id="status" /></p>
        <h3>Context</h3>
        <p><input type="text" name="context" id="context" /></p>
        <p><input type="submit" name="submit" value="Save"/></p>
    </form>
    </body>
</html>

Обратите внимание, что мы используем PHP_SELF, чтобы отправить форму обратно себе. Таким образом, мы можем сделать простой условный тест, чтобы увидеть, в каком состоянии находится форма.

Подключиться к MongoLab

Далее мы можем написать нашу подпрограмму подключения в верхней части файла для подключения к MongoLab:

 <?php
try 
{
    $connection = new Mongo('mongodb://<user>:<password>your_database.mongolab.com:31347/your_database');
    $database   = $connection->selectDB('your_database');
    $collection = $database->selectCollection('tasks');
} 
catch(MongoConnectionException $e) 
{
    die("Failed to connect to database ".$e->getMessage());
}

Вставить рутину документа

Теперь мы можем добавить массив переменных, переданных из формы в виде значений $ _POST в блоке try:

 try {

        $connection = new Mongo('mongodb://<user>:<password>your_database.mongolab.com:31347/your_database');
        $database   = $connection->selectDB('your_database');
        $collection = $database->selectCollection('tasks');

         $task               = array();
         $task['title']      = $_POST['title'];
         $task['status']     = $_POST['status'];
         $task['context']    = $_POST['context'];
         $task['saved_at'] = new MongoDate();

         $collection->insert($task);

Здесь нет ничего необычного, кроме вызова $ collection-> insert. Это вызов метода в классе PHP Mongo; он пытается вставить в коллекцию, на которую мы ссылаемся в нашей связи.

Здесь мы можем добавить еще одно исключение «catch», если вставка не работает:

 catch(MongoException $e) 
{
    $die('Failed to insert data '.$e->getMessage());
}

Подключите форму

Теперь все, что нам нужно, это поставить триггер, чтобы проверить: нужно ли показывать форму или сообщение об успешной вставке, в зависимости от того, была ли добавлена ​​запись.

Прямо в верхней части блока PHP создайте пустую переменную с именем $ trigger. Затем добавьте условный тест, чтобы увидеть, установлена ​​ли переменная кнопки отправки формы и имеет ли она значение. Если это так, то мы можем запустить действие сохранения, в противном случае нам просто нужно отобразить форму:

 $trigger = "";
if((!empty($_POST['submit'])) &amp;&amp; ($_POST['submit'] === 'Save')) 
{
    $trigger = "do_save";
}
else
{
    $trigger = "show_form";
}

Затем мы можем добавить еще один условный тест, чтобы увидеть, какое значение имеет $ trigger, и действовать соответствующим образом. Весь блок PHP теперь выглядит так:

 <?php
$trigger = "";

if((!empty($_POST['submit'])) &amp;&amp; ($_POST['submit'] === 'Save')) 
{
    $trigger = "do_save";
}
else
{
    $trigger = "show_form";
}

switch($trigger) 
{
    case 'do_save':

        try 
        {
            $connection = new Mongo('mongodb://<user>:<password>your_database.mongolab.com:31347/your_database');
            $database   = $connection->selectDB('andyhawthorne');
            $collection = $database->selectCollection('tasks');

            $task               = array();
            $task['title']      = $_POST['title'];
            $task['status']     = $_POST['status'];
            $task['context']    = $_POST['context'];
            $task['saved_date']   = new MongoDate();

            $collection->insert($task);       
        } 
        catch(MongoConnectionException $e) 
        {

            die("Failed to connect to database ".$e->getMessage());
        }

        catch(MongoException $e) 
        {

            $die('Failed to insert data '.$e->getMessage());
        }
        break;

    case 'show_form':
    default:
}
?>

Вы заметите, что мы добавили поле вставки: $ task [‘save_date’] = new MongoDate (). MongoDB не будет жаловаться, хотя мы раньше не использовали это поле. MongoDate () — это встроенная функция отметки времени в драйвере PHP.

Осталось только сделать следующее:

 <?php if ($trigger === 'show_form'): ?>

Добавьте это над открывающим тегом формы. Затем после закрывающего тега формы:

 <?php else: ?>
    <p>
        Task saved. _id: <?php echo $task['_id'];?>.
        <a href="<?php echo $_SERVER['PHP_SELF'];?>">Add another task?</a>
    </p>
<?php endif;?>

Это ответит на условный тест в верхней части нашего блока PHP.

Попробуйте это

Добавьте несколько записей с новой шикарной формой. Здесь идет большая часть, хотя. При сохранении каждого документа он будет отправлен в вашу базу данных MongoLab:

записи в MongoLab

Обновление и удаление записей

MongoLab пока не поддерживает массовую загрузку из области веб-администрирования, но вы можете создавать, редактировать и удалять документы. Прежде чем мы рассмотрим, как сделать это из PHP, давайте посмотрим на операции CRUD изнутри самого MongoLab.

Когда вы нажмете, чтобы просмотреть определенную коллекцию, вы увидите документы, отображаемые в разбивке по страницам:

редактирование / удаление документов

Нажатие на «х» действительно удалит документ. Нажав на отдельный документ, вы попадете на экран редактирования:

редактировать документ в MongoLab

Отредактируйте, а затем сохраните новую версию. Легко, а?

Как насчет PHP?

Для редактирования документов процесс аналогичен вставке:

  1. Создать веб-форму
  2. Подключитесь к MongoLab и получите документ
  3. Заполните форму с правильной записью
  4. Сохраните изменения

До сих пор мы видели, как использовать метод $ collection-> find (), который создает набор результатов для всех документов в коллекции. Для выбора отдельного документа мы можем использовать что-то вроде этого:

 $id = $_REQUEST['id'];
$task = $collection->findOne(array('_id' => new MongoId($id)));

Чтобы запустить обновление, вы можете создать массив данных формы, такой же, как для вставки, и использовать такой код для запуска обновления:

 $id = $_REQUEST['id'];
$collection->update(array('_id' => new MongoId($id)), $form_data);

Где $ form_data — это массив данных, отправленных с вашей веб-формы. Удаление документа следует той же идее:

 $id = $_REQUEST['id'];
$collection->remove(array('_id' => new MongoId($id)));

В заключение…

Работать с MongoDB стало намного проще благодаря MongoLab. Тот факт, что она запускает вашу базу данных в облаке, означает, что вы можете разрабатывать и развертывать свое приложение, не заботясь о компонентах базы данных вообще.

В этой статье вы увидели полностью проработанный пример вставки документов через PHP, а также узнали, как управлять этими документами в области веб-администрирования MongoLab. После добавления возможности массовой вставки из области администрирования MongoLab будет иметь все необходимое для развертывания баз данных MongoDB. Уже имеющиеся возможности делают весь процесс создания PHP-приложения на основе MongoDB простым.

Изображение листа через Shutterstock