MongoDB¶
MongoDB - документоориентированная (NoSQL) СУБД, хранящая все данные в виде объектов JSON. Отличительная особенность таких баз данных - отсутствие реляционных связей и заранее описанных схем таблиц.
Прежде, чем начать, необходимо установить саму MongoDB. Для этого зайдите на официальный сайт MongoDB и следуйте всем указанным на нем инструкциям по установке.
Для работы с MongoDB и Node.js имеется специальный официальный драйвер, который устанавливается через npm.
1 |
|
Подключение¶
Теперь подключимся к базе.
connection.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Подключение осуществляется с помощью метода connect()
экземпляра MongoClient
, который принимает URL, по которому доступна MongoDB (по умолчанию http://127.0.0.1:27017
), и callback-функцию, которой передается два параметра:
- ошибка подключения (
null
, если подключение прошло успешно); - экземпляр объекта подключения к MongoDB, через API которого создаются новые БД и осуществляется доступ к уже существующим.
После окончания работы с сервером MongoDB не забывайте закрывать соединение с сервером базы данных.
1 |
|
Создание базы данных¶
Для создания/подключения к базе данных используется метод db()
экземпляра объекта подключения, который принимает название БД и возвращает объект для выполнения . Если указанная база не существует, то она будет создана.
1 |
|
Физически база данных начинает свое существование только после создания в ней хотя бы одной коллекции (тоже самое, что и таблица в SQL).
Коллекции¶
Коллекции создаются вызовом метода createCollection()
, принимающего название коллекции и callback-функцию с ошибкой и результатом в качестве параметров.
1 2 |
|
Для удаления коллекции используйте применительно к ней метод drop()
, который в качестве аргумента принимает callback-функцию с двумя параметрами:
- ошибка (если удаление прошло успешно -
null
); - объект с успешным результатом.
1 2 3 4 5 6 |
|
В отличии от базы данных создание и подключение к коллекции осуществляется двумя разными методами.
Создание записи¶
Теперь создадим в коллекции users
первую запись.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Чтобы вставить сразу несколько записей имеется метод insertMany()
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Получение записи¶
Для получения всех записей в коллекции используйте метод find()
экземпляра коллекции.
1 |
|
Методу find()
в качестве параметра можно передать объект, выполняющий роль фильтра для извлекаемых записей. Например, в следующем примере возвращаются все записи, у которых поле gender
равно male
.
1 |
|
Чтобы получить только первую запись выборки, используйте метод findOne()
.
1 2 |
|
Для получения n-первых записей имеется метод limit()
, принимающий количество возвращаемых записей.
1 |
|
Сортировка полученного результата осуществляется с помощью метода sort()
, который принимает объект, в котором ключ - сортирующее поле, а значение - порядок сортировки (1
- по возрастанию, а -1
- по убыванию).
1 |
|
Ограничение по выборке и сортировку можно задать в объекте, передаваемом вторым необязательным параметром.
1 2 3 4 5 6 7 |
|
С полным списком параметров можно ознакомиться в официальной документации.
Объединение коллекций¶
Ранее уже упоминалось, что в MongoDB отсутствуют реляционность, тем не менее в ней возможно объединений коллекций по принципу LEFT JOIN в SQL с помощью метода aggregate()
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Метод aggregate()
принимает массив с описанием объединений с другими коллекциями. Объединение определяется объектом с ключом $lookup
, значением для которого служит объект конфигурации со следующими свойствами:
from
- название коллекции, с которой происходит слияние;localField
- наименование поля, по которому будет осуществляться объединение с внешней коллекцией;foreignField
- наименование объединяющего поля из внешней коллекции;as
- название поля в текущей коллекции, которое будет содержать данные, полученные в результате слияния.
Обновление записи¶
Обновление записи происходит с помощью метода updateOne()
, который принимает условие для записей, которые необходимо обновить, и объект со свойством $set
, в значении которого указываются, какие именно поля нужно изменить.
1 2 3 4 5 6 7 8 9 10 |
|
Удаление записи¶
За удаление записей отвечают методы deleteOne()
и deleteMany()
.
1 2 3 4 5 6 |
|
Более подробную информацию о возможностях драйвера для Node.js MongoDB можно получить на официальном сайте.