habrahabr

Основы MongoDB за 5 минут

  • четверг, 30 сентября 2021 г. в 00:37:01
https://habr.com/ru/post/580760/
  • JavaScript
  • *
  • Node.JS
  • *
  • MongoDB
  • *


Основы MongoDB за 5 минут

JavaScript *Node.JS *MongoDB *
Tutorial
Для тех, кто будет писать что в данном посте что-то упущено

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

MongoDB - документоориентированная система управления базами данных, не требующая описания схемы таблиц.

Считается одним из классических примеров NoSQL-систем, использует JSON-подобные документы и схему базы данных. Данную базу данных применяют в веб-разработке, в частности, в рамках JavaScript-ориентированного стека MEAN, MEVN, MERN, которые часто используются веб-разработчиками, как любимые стеки технологий для создания приложений.

Установка

Скачать MongoDB можно с официального сайта для Linux, MacOS, Windows.

В Linux это также можно сделать с одной из следующих команд:

apt

sudo apt install -y mongodb

dnf

cat <<EOF | sudo tee /etc/yum.repos.d/mongodb.repo
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
EOF

sudo yum install -y mongodb-org

brew

brew tap mongodb/brew
brew install mongodb-community

Также для того чтобы взаимодействовать с БД нам потребуется шелл (MongoShell), который качается отдельно: https://www.mongodb.com/try/download/shell?jmp=docs

Основы

После успешной установки MongoDB и Mongoshell мы можем спокойно начать взаимодействовать с базой данных с помощью терминала. Достаточно просто ввести mongosh:

Как мы видим мы находимся в базе данных test, однако на самом деле её пока что не существует!

Более подробно о том, что будет ниже можно прочитать здесь

Всё дело в том, что в mongoDB не существует базы данных, покуда мы в неё что-то не поместим. Также, при обращении к определенным объектам (база данных, коллекция) mongoDB они меняют значение, только если существуют, а если не существуют, то они просто создаются. Давайте продемонстрируем принцип работы:

Команда show dbs показывает какие базы данных существуют в данный момент. Как мы видим в списке нет значения test.

Для того чтобы создать новую базу данных (или использовать существующую) мы должны использовать ключевое слово use:

Как мы видим мы перешли в базу данных new_database, однако в списке мы её не наблюдаем (это из-за того правила, что я писал вверху: базы данных не существует, покуда неё что-то не поместить).

Давайте создадим новую коллекцию под названием customers (покупатели) и положим туда значение name: Daniil:

Тут мы обратились к базе данных с помощью db, затем мы указали коллекцию через точку и положили туда значение с помощью функции insertOne(). Синтаксис запросов к MongoDB очень напоминает синтаксис JavaScript и это просто отлично, так как вам не придётся учить новый синтаксис, для того чтобы работать с базой данных!

Теперь давайте посмотрим какие коллекции есть в нашей базе данных, но как это сделать? Можно ввести db. и нажать Tab, для того чтобы посмотреть какие свойства и методы есть у нашего объекта db (объектом для легкости понимания можно считать обычный объект из JavaScript, тут даже методы есть похожие: toString, isPrototypeOf, hasOwnProperty)

Далее мы можем посмотреть наши коллекции с помощью специального метода getCollectionNames:

Вуаля! У нас есть массив из наших коллекций и по такому же принципу (нахождения нужных нам методов) можно исследовать всю MongoDB, однако мне ещё есть что рассказать, продолжим.

Есть ещё сокращения команд, которые мы тоже можем использовать, например show collections вернёт нам то же самое, однако вид будет более читаемый для человека:

У нашей коллекции, к слову, тоже есть методы и свойства, но они немного другие:

Мы можем использовать коллекцию в связке с find(), для того чтобы вывести всё содержимое коллекции:

Давайте добавим ещё нескольких покупателей с помощью метода insertMany():

Итак, давайте заметим несколько моментов на скриншоте:

  1. Метод insertMany() принимает массив элементов, а не просто элементы

  2. MongoDB все равно прилегают ли ключи и их значения к скобкам или нет

  3. Синтаксис MongoDB очень похож на синтаксис JavaScript, поэтому мы можем использовать все виды кавычек (двойные, одинарные, обратные).

В ответ данный метод отдал нам объект, в котором есть свойство acknowledged (подробнее читайте тут) и вложенный объект с ключами из массива и соответствующими им id.

Теперь давайте выведем двух пользователей (не важно каких) из нашего списка используем следующую команду db.customers.find().limit(2):

Как мы видим мы вывели всего два объекта из нашей коллекции, однако что ещё мы можем делать с "найденными" объектами? А вот что:

У метода есть свои методы и мы как и в JavaScript можем цеплять методы один за другим, для того чтобы провести результат который отдал один метод через следующий, идущий за ним через ..

Теперь давайте рассортируем наши значения с помощью метода sort():

Метод sort() принимает в аргументы объект, где указано по какому значению нужно провести сортировку. 1 говорит о том, что сортировку нужно произвести в порядке возрастания, -1 же будет производить её в порядке убывания.

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

Необычное ключевое слово $set, которое вы видите на скриншоте является атомным оператором, о нём мы поговорим попозже. Главное что стоит сейчас увидеть - то что мы поменяли значение, а $set просто указывает новые значения в нашей записи.

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

Появился ещё один атомный оператор, который обозначает не равно (ne - not equal). В данном случае запрос звучит так: "Найди мне все записи, где имя не равно 'Daniil', и поставь им значение 'age' в 15". (Для справки: set (англ.) - назначить, поставить)

Теперь рассортируем массив с помощью двух аргументов:

Тут sort() принял аргументом объект с двумя ключами. Сначала он будет сортировать записи по первому ключу, а если найдет повторяющиеся первые ключи, то начнёт сортировать по второму ключу. -1 означает обратную сортировку (в порядке убывания).

MongoDB позволяет получить специфические поля из найденных объектов и не показывать другие (нам ненужные поля):

Здесь мы просто наши все записи с помощью {} (так как определенного идентификатора для нахождения не задано, mongoDB вернул нам все записи), а вторым аргументом передали что именно хотим видеть. 1 тут соответствует выводу, а 0 - наоборот, те данные, которые не будут выводиться.

Также мы можем выводить наши значения и с помощью других методов, однако дочерние методы тоже будут другими:

В данном случае мы перевели наш массив данных в обычный массив. Позже мы сможем проводить над ним некие операции.

Более сложные запросы

Атомные операторы нужны для того, чтобы усложнять запросы. Популярные атомные операторы:

  • gt - greater than (больше)

  • lt - less than (меньше)

  • gte и lte - больше или равно и меньше или равно

  • eq - равно

  • ne - не равно

  • in - значение содержится в чем-то

  • nin - значение не содержится в чем-то

  • or - или

  • and - и

  • exists - существует

  • set - изменить или добавить

Некоторые из них мы рассмотрим ниже:

Как мы видим тут вывелись все записи, у которых поле age больше чем 15.

Тут же вывелись все записи, у которых имя содержится в массиве ['Daniil', 'Jinx'] .

Добавим ещё один объект, у которого не будет поля age и проверим работу оператора exists:

Видим, что тут exists отработал верно и запись с name: 'Denis' не вывелась.

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

Все остальные команды по типу:

  • deleteOne (удаляет запись)

  • replaceOne (заменяет запись)

  • updateOne (обновляет запись)

и их братья-близнецы с Many работают точно так же. Вы можете попробовать узнать зачем они нужны просто создав базу данных с парой записей и поэксперементировать (в конце-концов так материал будет усваиваться достаточно быстро и осядет в вашей голове на долгое время), ведь всё что вам нужно вы уже узнали.

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

Теги: mongodbjavascriptnodejsбазы данныхmongosh
Хабы: JavaScript Node.JS MongoDB
Всего голосов 2: ↑1 и ↓1 0
Комментарии 0