MongoDB

Что такое document

Понятие документа - основа MongoDB. Недаром говорится, что MongoDB - документо-ориентированная система управления базами данных.

Document входит в состав collection и наполняет ее содержимым. Document - это обычный JSON-объект.

Если есть навык создания и работы с JSON-объектами, то уже можно создавать документы в MongoDB.

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

{
  "_id" : ObjectId("591f49970f7b726a5beb58af"),
  "name" : "Anna"
}

Стоит обратить внимание на ключ “_id” - этот ключ и значение ключа MongoDB автоматически генерирует для уникальной идентификации каждого документа в базе данных.

Чуть более сложный пример документа в MongoDB:

{
	"_id" : ObjectId("591f49970f7b726a5beb58af"),
	"name" : "Anna",
	"surname" : "Tudor",
	"music" : [
		"country",
		"blues",
		"chill-out"
	],
	"age" : 18,
	"virgin" : true
}

В данном случае документ состоит из нескольких типов данных - Number, Array, String, Boolean.

Два документа в коллекции canada базы данных users:

{
	"_id" : ObjectId("591f49970f7b726a5beb58af"),
	"name" : "Anna",
	"surname" : "Tudor",
	"music" : [
		"country",
		"blues",
		"chill-out"
	],
	"age" : 18,
	"virgin" : true
}
{
	"_id" : ObjectId("591f4eaf02ed4d6e1d81bc97"),
	"name" : "Leanne Graham",
	"username" : "Bret",
	"email" : "Sincere@april.biz",
	"address" : {
		"street" : "Kulas Light",
		"suite" : "Apt. 556",
		"city" : "Gwenborough",
		"zipcode" : "92998-3874",
		"geo" : {
			"lat" : "-37.3159",
			"lng" : "81.1496"
		}
	},
	"phone" : "1-770-736-8031 x56442",
	"website" : "hildegard.org"
}

Таких документов в коллекции canada может быть сколько угодно.

Вот в принципе и все, что нужно знать о документах в MongoDB.

На этом все.


MongoDB

Что такое collection

В базах данных MongoDB данные объединяются в коллекции - collection. В одной базе данных может быть от одной до многих collections.

Смысл collection - объединять однотипные данные. То есть данные, котороые можно объединить по какому-либо признаку.

Например, в базе данных animals может быть две collections - cats и dogs. В коллекции cats хранятся все данные, о которых можно сказать - “это данные по кошкам”. В коллекции dogs хранятся “все данные по собакам”.

Создание collection

В базе данных создать collection можно командой:

db.createCollection('NAME_COLLECTION')

Например, я создам две коллекции cats и dogs в базе данных animals. Для этого создам базу данных animals:

> use animals
switched to db animals
>

Создам коллекцию cats:

> db.createCollection('cats')
{ "ok" : 1 }

Создам коллекцию dogs:

> db.createCollection('dogs')
{ "ok" : 1 }

Посмотреть список существующих колекций базы данных можно командой:

show collections

Проверю, создались ли успешно коллеции cats и dogs в базе данных animals:

> show collections
cats
dogs

Переименование collection

Операция переименования collection в MongoDB выполняется командой:

db.collection.renameCollection('NEW_NAME')

Например, я создал коллекцию bird в базе данных animals:

> db.createCollection('bird')
{ "ok" : 1 }
> show collections
bird
cats
dogs
>

… и хочу переименовать эту коллецию в birds:

> db.bird.renameCollection('birds')
{ "ok" : 1 }
> show collections
birds
cats
dogs
>

В результате коллекция bird успешно переименована в birds.

Удаление collection

В MongoDB удаление коллекции выполняется командой:

db.COLLECTION_NAME.drop()

Например, я хочу удалить коллекцию birds из базы данных animals:

> db.birds.drop()
true
> show collections
cats
dogs
>

Коллекция birds успешно удалена из базы данных.

Создание collection - автоматический способ

В MongoDB имеется способ автоматического создания collection - путем добавления документа в новую коллецию при помощи метода insert.

Например, коллекции insects в базе данных animals не существует. В будущую коллекцию insects я добавлю документ cockroach и тем самым автоматически создам коллецию insects:

> db.insects.insert({ name: 'cockroach' })
WriteResult({ "nInserted" : 1 })
> show collections
cats
dogs
insects
>

На этом все.


MongoDB

Создание базы данных

В двух предыдущих примерах научились устанавливать MongoDB. А также научились запускать и останавливать сервер MongoDB.

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

Командная оболочка MongoDB носит имя mongo-shell и запускается в Linux одной командой:

mongo

В консоли отобразится сообщение и приглашение командной строки, говорящее о том, что мы находимся в командной оболочке MongoDB:

MongoDB shell version v3.4.4
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.4
...
> 

Список баз данных

Увидеть список всех существующих баз данных можно командой:

show dbs

Вот список баз данных на момент установки MongoDB в системе Linux. Видно, что обе базы пустые:

> show dbs
admin  0.000GB
local  0.000GB
> 

Создать базу данных

Команда создания новой базы данных в MongoDB очень проста:

use DATABASE_NAME

Например, создам новую базу данных по имени users:

> use users
switched to db users
> 

Команда user универсальная. Если база данных users уже существует, то будет выполнен просто переход в эту базу данных.

Если базы данных users не существует, то она будет создана и будет выполнен автоматический переход в эту базу данных.

Имя базы данных

Узнать имя текущей ( в которой на данный момент нахожусь ) базы данных можно командой:

db

В моем случае это будет так:

> db
users
>

Удаление базы данных

Удалить базу данных можно командой:

db.dropDatabase()

Важный момент - нужно находиться в той базе данных, которую необходимо удалить. Команда dropDatabase() не принимает аргументов.

Например, я хочу удалить базу данных users:

> show dbs
admin  0.000GB
local  0.000GB
users  0.000GB
>

Для этого я перейду в базу данных users:

> use users
switched to db users
>

И выполню команду dropDatabase():

> db.dropDatabase()
{ "dropped" : "users", "ok" : 1 }
>

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

> show dbs
admin  0.000GB
local  0.000GB
>

На этом все.


MongoDB

Управление MongoDB

MongoDB управляется так же, как и все остальные процессы в системе Linux.

Запуск MongoDB

Сервер MongoDB запускается командой:

sudo service mongod start

Будет “висеть” в фоновом режиме и слушать команды на порту 27017.

Остановка MongoDB

Остановить сервер MongoDB можно командой:

sudo service mongod stop

Перезапуск MongoDB

Если нужно перезапустить сервер MongoDB, то это выполняется командой:

sudo service mongod restart

Статус MongoDB

Посмотреть статус сервера MongoDB можно командой:

sudo service mongod status

Покажет, запущен сервер MongoDB и его текущее состояние.


Что такое m4b

Формат m4b — не предусмотренное стандартом расширение для медиаконтейнера mp4. Это аудио-файл формата AAC ( Advanced Audio Coding ) поддерживающий закладки. В основном этот формат используется для аудиокниг и подкастов онлайн-магазинов компании Apple ( iTunes Store ).

Какие программы есть

Под macOS существует хорошее приложение для создания \ конвертирования книг в формате m4b. Это приложение называется Audiobook Builder.

Приложение отличное - простое, интуитивно понятное и имеет в себе все, что необходимо, ничего лишнего.

Но есть одна загвоздка - чтобы пользоваться данным приложением, нужно его купить ( во-первых ); а во-вторых - нужно приобрести технику Apple ( iMac, macBook ).

Для пользователей Linux вариантов в плане приложений для создания формата m4b не так уж много. Есть много гиковских - консоль, консольные утилиты. Можете сами погуглить - вариантов выпадет много, но все они на любителя, что называется.

Единственным ( на момент написания статьи ) “человеческим” вариантом является приложение под названием m4Baker.

m4Baker — небольшое Python / QT ( PyQT ) графическое приложение для создания iPod-совместимых аудиокниг формата m4b, с главами и обложками. Приложение бесплатное. Лицензия - GNU General Public License v3 ( GPLv3 ).

Установка m4Baker

Приложения m4Baker нет в официальном репозитории дистрибутива Linux Mint. Программу нужно устанавливать вручную, набором нескольких команд.

Итак, открываем терминал и последовательно запускаем на выполнение команды:

sudo apt-get install python-qt4
sudo apt-get install libcanberra-gtk-module
sudo apt-get install faac
sudo apt-get install libmp4v2-2
sudo apt-get install mp4v2-utils
sudo apt-get install sox
sudo apt-get install libsox-fmt-mp3

Можно объединить все в одну команду, конечно, но я оставил все команды разделенными для большей ясности процесса.

Установку пакетов я производил под Linux Mint 18 Cinnamon. Это аналог Ubuntu 16.04.1 LTS (Xenial Xerus).

Все пакеты нашлись в репозитории, кроме последнего - libsox-fmt-mp3. Его пришлось скачивать вручную по ссылке - Xenial/libsox-fmt-mp3. И устанавливать пакет libsox-fmt-mp3_14.4.1-5_amd64.deb также вручную, локально.

После того, как все вышеперечисленные пакеты успешно установлены, необходимо установить пакет программы m4Baker:

  • скачиваем дистрибутив программы m4Baker из GitHub-репозитория по ссылке - GitHub m4Baker
  • распаковываем полученный архив m4baker-master.zip, получаем разархивированную директорию m4baker-master
  • открываем директорию m4baker-master в терминале и запускаем команду установки программы m4Baker:
sudo python setup.py install --optimize=1

Эта команда установит программу m4Baker со всеми ее зависимостями.

Теперь можно запустить m4Baker любым удобным способом - через Start Menu, из командной строки консоли. У меня m4Baker успешно запустился через лаунчер Synapse.

Обзор m4Baker

m4Baker благодаря использованию SoX, faac и mp4v2 поддерживает большинство популярных аудио-форматов, есть возможность изменения и добавления метаданных, добавления обложки.

Первый запуск m4Baker выглядит таким образом:

m4Baker - First Launch

Справка, представленная в самой программе m4Baker, является самодостаточной - ее полностью хватает для пользования.

Для загрузки mp3-файлов нужно нажать кнопку “Add Audiobook” ( иконка книги ), откроется диалоговое окно выбора файлов.

После загрузки файлы добавятся в список обработки:

m4Baker - Add Files

Стоит обратить внимание, что выборка должна быть “чистой” - только mp3-файлы и никакого другого “мусора”, иначе программа m4Baker не запустится для обработки файлов.

В создаваемой m4b-аудиокниге возможно автоматическое разделение на части, возможна сортировка исходных файлов по имени или номеру трека (ID3-тегу), создание маркеров глав, перемещение глав между аудиокнигами:

m4Baker - Chapters

m4Baker - Sort Chapters

m4Baker - Split Book

Нажатие на кнопку “Procell all” ( иконка шестеренки ) запустит процесс создания файла формата m4b:

m4Baker - Process

Замечания

OS Linux

Я протестировал приложение m4Baker на рабочей машине Linux Mint 18 Cinnamon. Файлы mp3-формата аудиокниги были успешно сконвертированы в файл формата m4b. На Linux Desktop данный файл успешно прослушивался.

m4Baker - Play m4b File

OS Android

На Android ( v4.0.3 ) файл запускался с некоторой задержкой, но прослушивался ( Smart AudioBook Player ).

Из заметных недостатков - не отображается обложка ( cover ) аудиокниги, хотя при конвертации в программе m4Baker я добавлял обложку в описание к создаваемому файлу ( данная обложка присутсвует на скриншотах ).

macOS

Самый главный минус и разочарование. Файл m4b, созданный в программе m4Baker, у меня не открылся вообще под macOS Sierra ( 10.12 ).

Плейер iTunes не открыл файл и скромно промолчал о данном факте. QuickTime Player также не смог открыть файл, но сообщил мне о данном факте.

OS Windows

О системе Windows ничего сказать не могу, так как не пользуюсь данной операционной системой.

Заключение

Приложение m4Baker можно использовать для создания аудиокниг формата m4b под операционной системой Linux. Приложение удобно и просто в использовании.

Однако, данное приложение несколько сложно в установке, имеет не полный функционал. Созданные в этой программе аудиокниги проиигрываются не под всеми операционными системами и плейерами.

В программе отсутсвуют возможности для добавления дополнительных метаданных, таких как “Narrator”, “Year”, “Description”, “Copyright”. К минусам можно отнести и отсутсвие программы такого класса в безграничных репозиториях Ubuntu.

Увы, как мне кажется, пока у программы Audiobook Builder нет достойной альтернативы.

В написании данного материала мне помог ресурс - Baking audiobooks with m4Baker.

На этом все. Всем удачного Нового Года!