Разработка лендингов, квизов
сайтов, web-приложений

MongoDB для NodeJS туториал: Часть 1 - Установка MongoDB и соединение с базой данных

mongodb логотип

Что же такое MongoDB и NoSQL базы данных?

Согласно википедии:

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

Что значит документоориентированная или NoSQL?

Документированная БД хранит данные в виде документов и обычно реализуется с помощью подхода NoSQL. Эти документы имеют структуру дерева. Структура начинается с корневого узла и может содержать несколько внутренних и листовых узлов. Листовые узлы содержат данные, которые при добавлении документа заносятся в индексы, что позволяет даже при достаточно сложной структуре данных находить место искомых данных.

Документы могут быть организованы (сгруппированы) в коллекции. Аналог таблиц в реляционных БД. Но коллекции могут хранить другие коллекции. Хотя документы в коллекции могут быть с произвольным содержимым, принято использовать в коллекции документы со схожей структурой.

Документооиентированные БД применяются в система управления содержимым, издательском деле, документальном поиске и т.п. К СУБД данного типа относятся CouchDB, Couchbase, MongoDB, Berkeley DB.

В данной статье мы рассмотрим возможности NoSQL БД на примере MongoDB.

Преимущества MongoDB

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

JSON-документы

{
  "_id": "5cf0029caff5056591b0ce7d",
  "firstname": "Денис",
  "lastname": "Иванов",
  "address": {
    "street": "Ленина ул.",
    "city": "Ижевск",
    "region": "Удмуртская республика",
    "zip": "426000"
  },
  "hobbies": ["серфинг", "кодинг"]
}

Такие JSON-подобные документы поддерживают массивы и вложенные объекты. И позволяют строить гибкие и динамические схемы.

Мощный язык запросов

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

db.users.find({ "address.zip" : "90404" })
{ "_id": "5cf0029caff5056591b0ce7d", "firstname": "Jane", "lastname": "Wu", "address":{}}
{ "_id": "507f1f77bcf86cd799439011", "firstname": "Jon", "lastname": "Davis", "address":{}}
{ "_id": "5349b4ddd2781d08c09890f3", "firstname": "Jim", "lastname": "White", "address":{}}
{ "_id": "5bf142459b72e12b2b1b2cd", "firstname": "Jeff", "lastname": "Taylor", "address":{}}
{ "_id": "5cf003283b23d04a40d5f88a", "firstname": "Jerry", "lastname": "Miller", "address":{}}
{ "_id": "5bf142459b72e12b2b1b2cd", "firstname": "Jai", "lastname": "Williams", "address":{}}
{ "_id": "5cf0036deaa1742dd225ea35", "firstname": "Jess", "lastname": "Johnson", "address":{}}
{ "_id": "54495ad94c934721ede76d90", "firstname": "Jill", "lastname": "Brown", "address":{}}
{ "_id": "566eb3c704c7b31facbb0007", "firstname": "Janet", "lastname": "Jones", "address":{}}
{ "_id": "5a999cc461d36489a27f2563", "firstname": "Jan", "lastname": "Smith", "address":{}}

Предоставляет всю мощь реляционных БД плюс немного больше!

session.start_transaction()
order = { line_items : [ { item : 5, quantity: 6 } ] }
db.orders.insertOne( order, session=session );
for x in order.line_items:
  db.inventory.update(
    { _id  : x.item } ,
    { $inc : { number : -1 * x.quantity } },
    session=session
  )
session.commit_transaction()

Что нужно чтобы начать с ней работать?

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

  1. Облачные сервисы (это например Mlab или MongoDB Atlas);
  2. Локальная установка.

Если вы не хотите запариваться с установкой, то следуйте первому пути. Необходимо зарегистрироваться и далее создать базу данных с помощью внутреннего визарда. Который все сделает за вас и даст вам ссылку на БД, с которой мы и будем работать.

Но мы пойдем другим путем и запустим сервис mongoDB на локальной машине c Windows10.

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

  1. MongoDB Server (для Windows)
  2. MongoDB Compass Community Edition

Первое - это собственно сама база данных с драйверами для Windows. А второе - это GUI для более удобной работы с БД.

Процесс установки довольно простой и после установки двух пакетов. Необходимо запустить MongoDB Compass найдя его в панели приложений Windows 10.

Установленный MongoDB Compass в Windows 10

Установленный MongoDB Compass в Windows 10

После запуска мы увидим следущее окно:

MongoDB Compass в действии

MongoDB Compass в действии

В MongoDB Compass мы можем работать как с локальной БД, так и с облачными сервисами mlab.com и mongodb.com.

Взаимодействие NodeJS и MongoDB

Но как же нам взаимодействовать с mongoDB через приложения, написанные на NodeJS? Правильно! Через драйвер. Этих драйверов написано уже целая куча, почти для всех языков программирования. Мы же будет работать с нашим любимым JavaScript.

Официальный драйвер для mongodb можно скачать здесь. Ну или воспользуемся нашим любимым npm.

Создадим какую-нибудь папку с проектом:

C:\Users\booom\projects\nextjs\mongodb-driver-ex

Выполним следующие команды:

$ mkdir mongodb-driver-ex
$ cd mongodb-driver-ex
$ npm init -y
$ npm i mongodb

Создадим в этой директории файл index.js и напишем в ней следующий код.

const MongoClient = require("mongodb").MongoClient
const uri = "mongodb://localhost:27017/test"
const client = new MongoClient(uri, { useNewUrlParser: true })

client.connect((err, client) => {
  if (err) console.log(err)
  console.log("Started...")

  const db = client.db("test")
  client.close()
})
  • node.js
  • mongodb
  • туториал
  • базы данных
  • NoSQL