В данной статье будет рассмотрен процесс установки и настройки СУБД MongoDB на виртуальные сервера под управлением операционной системы FreeBSD 11.
Примечание: на ОС FreeBSD 10 описанные действия приведут к появлению ошибок.
Что это такое?
MongoDB - NoSQL документоориентированная база данных без определенной структуры, предназначена для поддержания баз с разнотипными данными, в разы упрощает выборку и агрегацию данных, поддерживает создание кластеров и репликацию данных. Для тех, кто знаком с javascript не составит труда работать в ней, так как в MongoShell используется именно этот язык.
Установка MongoDB
Важно: все действия выполняются с правами суперпользователя.
После подключения к удаленному серверу по SSH обновите локальную базу бинарных пакетов на последнюю версию:
pkg update -f
При помощи утилиты pkg установите СУБД:
pkg install mongodb
Система попросит ответить на несколько вопросов, например обновление pkg (они служебные и на каждый из них без лишних проблем можно ответить ‘Yes’).
Настройка автозапуска
Чтобы MongoDB автоматически стартовала при запуске VPS необходимо внести изменения в файлы конфигурации сервера.
С помощью текстового редактора, например vi, установленного по-умолчанию, откройте файл:
vi /etc/rc.conf
В конец файла добавьте следующую строку:
mongod_enable="YES"
Содержимое будет выглядеть примерно следующим образом:
Запустите систему управления базами данных:
service mongod start
Starting mongod.
Чтобы проверить статус работы выполните команду:
service mongod statu
mongod is running as pid 825.
Настройка портов
Внести персональные настройки в работу MongoDB можно через конфигурационный файл приложения /usr/local/etc/mongodb.conf.
Например, в целях безопасности можно изменить порт на котором поднимается СУБД со значения по-умолчанию на любой свободный.
Примечание: номер порта по-умолчанию 27017.
Откройте файл:
vi /usr/local/etc/mongodb.conf
Внесите параметр port и измените значение на любое удобное для вас.
net:
port: 1234
Чтобы изменения вступили в силу необходимо перезапустить СУБД:
service mongod restart
Stopping mongod. Starting mongod.
Подключение к Mongo
Для подключения к MongoDB используйт следующую команду, указав используемый порт:
mongo --port <номер_порта>
Теперь можно работать с системой управления базами данных.
Создание простой базы данных в MongoDB
Предметная область нашей базы - Строительная компания, которая строит жилые комплексы, включающие в себя здания.
При создании объектам автоматически присваивается уникальный номер _id.
Создадим БД с именем Company:
use Company;
switched to db Company
Создадим 3 коллекции: жилые комплексы, здания и собственники, и зададим структуру каждой таблицы с указанием полей и типов данных.
db.createCollection(
"ApartmentComplex", {
validator: {
name: {$type: "string"},
numberOfBuildings: {$type: "number"},
hospital: {$type: "bool"},
school: {$type: "bool"},
kindergarten: {$type: "bool"},
subway: {$type: "bool"}
}
}
);
db.createCollection("Building", {
validator: {
address: {$type: "string"},
height: {$type: "number"},
idComplex: {$type: "object"}
}
});
db.createCollection("Owner", {
validator: {
{name: {$type: "string"},
{surname: {$type: "string"},
{passportData: {$type: "string"}
}
});
Далее заполним каждую коллекцию данными.
Добавление комплекса:
db.ApartmentComplex.insert(
{
name: "Cloud",
numberOfBuildings: 12,
hospital: true,
school: false,
kindergarten: false,
subway: true
});
Добавления собственников:
db.Owner.insert(
{
name: "Vasya",
surname: "Ivanov",
passportData: "aaaa #aaaa"
}
);
db.Owner.insert(
{
name: "Ivan",
surname: "Ivanov",
passportData: "aaaa #1111"
}
);
Гибкость языка javascript позволяет при создании записей указывать в качестве аргументов массивы данных, благодаря чему можно привязать уже существующих собственникам к конкретным домам и даже квартирам:
db.Building.insert(
{
address: "Lenina",
idComplex: db.ApartmentComplex.findOne({name: "Cloud"}, {_id: 1}),
height: 120,
sold: false,
floors: [{
number: 12,
apartmentsCount: 10,
sold: true,
apartment: [{
number: 100,
roomsNumber: 3,
square: 65,
idOwner: db.Owner.findOne({passportData: "aaaa #aaaa"}),
price: 20000000
}]
}]
}
);
Чтобы вывести на экран все содержимое коллекции выполните команду:
db.<имя_коллекции>.find();
Чтобы найти определенный объект используйте следующую команду:
db.<имя_коллекции>.findOne( { <поле1>: <значение>, <поле2>: <значение>, ... });