Начало работы с MongoDB, часть 1






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

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

В серии статей посвящённых MongoDB, мы с вами разберёмся с азами работы, такими как создание, изменение и удаление баз данных и записей, а также более сложными вещами — сложными выборками данных и анализом при помощи MapReduce. Поехали!



Установка MongoDB

Загрузить MongoDB для своей платформы вы можете в соответствующем разделе их сайта или же порыться в репозиториях своего дистрибутива. У меня в системе на данный момент используется Arch Linux, где всё необходимое было установлено одной командой:

После успешной установки необходимо запустить сервер MongoDB:

Всё. Теперь можно приступать к нашему увлекательному туру по просторам MongoDB!

И последнее замечание. В этой серии статей все примеры тестируются на стабильной версии MongoDB 2.2.1 и если у вас установлена unstable-версия или более новая, то помните об этом, чтоб не оказаться самому себе злым Буратино.

Запустите в терминале

И если сервер был установлен и запущен корректно, вы увидите приглашение оболочки MongoDB:

Создание базы данных и вставка записей

После того, как сервер установлен, базы данных не существует. Но не волнуйтесь, она будет тут же создана, как только мы начнём вставлять записи, чем мы сейчас и займёмся. Скопируйте в буфер обмена нижеприведённый код и выполните его в оболочке MongoDB:

Получилось? Прекрасно! Чтобы убедиться в том, что база данных и записи были созданы, выполните следующую команду:

Если всё прошло так, как нужно, вы увидите следующий вывод:

Это и есть созданные записи. Обратите внимание на появившееся поле _id, которое мы не заказывали при добавлении записей. Оно добавляется MongoDB автоматически, если вы его не указываете, поскольку каждая запись в БД должна иметь уникальный ключ.

Итак, записи созданы, теперь у нас всё готово для того, чтобы поупражняться в поиске.

Выборка записей

Помните предыдущую команду? Она выбирает и отображает из БД содержимое всех записей. А как насчёт детальной выборки данных? Как нам выбрать только лиц женского пола, отфильтровав мужчин? Хороший вопрос. Ответом на этот вопрос являются селекторы.

Селекторы

Селекторы в MongoDB это то, что в традиционном SQL называется WHERE-условиями. Так же, как и при использовании WHERE в SQL, селекторы в Mongo позволяют делать следующее:

  • определять критерии, которым должны соответствовать искомые записи (аналог оператора AND в SQL);
  • определять критерии, которым могут соответствовать искомые записи (аналог оператора OR в SQL);
  • и многое другое

Записи, которые ДОЛЖНЫ соответствовать критериям

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

Эта команда выбирает записи, у которых поле 'gender' имеет значение 'f'. После её выполнения вы должны увидеть такой вывод:

Окей, а что если нам нужны только мужчины? Просто определяем другое значение поля 'gender' в селекторе:

Выборка по нескольким критериям

Двигаемся дальше. теперь нам нужны мужчины англичане:

А как насчёт мужчин англичан или американцев? Легко! Слегка дополним предыдущую команду:

Сортировка

Что, если нам необходимо сортировать записи, скажем по имени или национальности? Аналогом SQL-инструкции ORDER BY в MongoDB является метод sort (), принимающий в качестве параметров список полей и направление сортировки. В отличие от SQL направление сортировки в MongoDB указывается числами 1 — для сортировки по возрастанию и -1 — для сортировки по убыванию.

Давайте посмотрим как это работает на примере выборки всех английских или американских мужчин, сортируя записи по национальности в порядке убывания:

А как насчёт сортировки национальности по убыванию, а имени по возрастанию? Никаких проблем, немного дополним запрос:

Как видим, в этот раз Arnold Schwarzenegger выводится перед Tony Curtis.

Ограничение выборки

Что, если у нас в результате выборки получается довольно большой объём данных и нам необходимо ограничить его, скажем, двумя записями. Mongo предоставляет метод limit (), аналогичный одноименной инструкции в MySQL. Давайте перепишем предыдуший запрос таким образом, чтобы он возвращал только первые две записи:

А что, если нам нужны не первые две записи, а только третья и четвёртая. Для того, чтобы пропустить нужное количество записей результата выборки в MongoDB есть отдельный метод skip ():

Как видим, две первые записи были пропущены.

Изменение записей

Как вы и ожидали, MongoDB умеет кроме всего прочего изменять существующие записи. Так же, как и в SQL, и в методе find () MongoDB, вам необходимо определить критерии выборки изменяемых записей, а затем поля записей, значения которых необходимо изменить.

Предположим, нам необходимо изменить цвет волос у James Caan с седого на каштановый. Пример ниже показывает, как это сделать, используя метод update ():

В случае отсутствия ошибок MongoDB никак не сообщит о том, что обновление записи прошло успешно. Чтобы убедиться воочию, сделаем запрос:

Как видим, всё прошло успешно. Одно важное замечание: если вы опустите модификатор $set, то запись будет замещена записью с полями, указанными во втором параметре метода upadte (), а не обновлена, как вы того можете ожидать>. Будьте внимательны.

Удаление записей

Думаю, вы уже начинаете представлять, как работать с MongoDB. В этом разделе рассмотрим метод удаления записей. Чтобы удалить определённые записи из БД, вам потребуется при помощи селекторов определить критерии выборки удаляемых записей: суть та же, что и в инструкции DELETE традиционного SQL. Обратите внимание, что если вы не передадите методу remove () в качестве параметра ни одного селектора, будут удалены все записи базы данных, а затем и вся БД.

Итак, предположим. нам потребовалось удалить James Caan из нашего списка актёров. Делается это одной командой:

Так же, как и с update (), вы не получите ничего в ответ, так что давайте на всякий случай убедимся, удалилась ли нужная запись или нет:

Если удаление прошло успешно, вы не увидите ничего в ответ.

И в завершение наших сегодняшних экспериментов, давайте удалим все оставшиеся записи и саму БД. Как говорилось выше, сделать это можно вызовом метода remove () без параметров:

Теперь, если вы попробуете получить спсиок записей нашей БД, вы не увидите ничего в ответ, что говорит о том, что все записи и БД были удалены:

Итоги

В сегодняшней кратенькой заметке мы с вами:

  • узнали что такое MongoDB;
  • установили её;
  • научились создавать, выбирать, изменять и удалять записи

Владея этим базовым багажом знаний, вы можете начать погружение в удивительный мир MongoDB. Если вас заинтересовала Mongo, вы можете получить больше информации на официальном веб-сайте или в твиттере.

В следующий раз мы с вами займёмся изучением более сложных запросов. Stay tuned и большое вам спасибо, что были с нами ;)

Источник.




Начало работы с MongoDB, часть 1: 9 комментариев

  1. Why cackle? У тебя же нет простынь комментариев, чтобы жаловаться на время загрузки disqus?

  2. Прошу прощение за занудство, в Ваших примерах полно ошибок: текст не совпадает с запросами.

    1. Да собственно, прощения просить не за что. Я всегда рад замечаниям и комментариям по делу. Но уж если говорите «полно ошибок», то, если не трудно, укажите где именно.

      1. глазами пробежался по скриптам начиная с «мужчин англичан». Вы ищите либо мужчин, либо англичан.(or -> and), а дальше при остальных операциях у меня одни FIND светились, а сейчас вижу, что есть и UPDATE и прочие. за «полно ошибок» прошу извинить, обознался.

        1. Как раз в том фрагменте выполняется поиск всех мужчин, а далее идёт массив из двух национальностей: американцев и англичан, завёрнутый в селектор $or. Чуть ниже приведён вывод результатов запроса, в котором видно, что выбраны и американцы и англичане.

          Ну и спасибо за внимание к статье в любом случае, от ошибок не застрахован никто ;)

  3. Спасибо ОГРОМНЕЙШЕЕ автору!!!!!!!!!!!!!!!!

    Задали тему диплома «Mongodb», уже крыша едит, ничегоне выходило,а тут почитала, попробывала и начало получаться!!!Появилась надежна на то что сделаю диплом сама!)))

    Еше раз повторюсь, огромное спасибо автору за статью*))

    =*

Комментарии запрещены.