mongoDB

MongoDB — это документно-ориентированная база данных NoSQL.
В отличие от традиционных реляционных баз данных (например, MySQL или PostgreSQL), где данные хранятся в таблицах и строках, в MongoDB данные хранятся в виде документов в коллекциях.

Основные характеристики:

  • Данные хранятся в формате BSON (расширенный JSON).
  • Гибкая схема: можно хранить документы с разной структурой в одной коллекции.
  • Хорошо подходит для проектов с быстро меняющейся структурой данных, масштабируемых приложений и больших объёмов информации.

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

Особенности:

  • В одной коллекции можно хранить документы с разной структурой.
  • Коллекции создаются автоматически при добавлении в них первого документа.
  • Коллекции объединяют данные по смыслу, например:
    • users
    • orders
    • products

Документ — это единица хранения данных в MongoDB.
По сути, это структура в формате JSON (или BSON) с парой ключ-значение.

Пример документа:

{
  "_id": "664c5b60c98df1a02a",
  "name": "Алексей",
  "age": 28,
  "email": "aleksey@example.com",
  "hobbies": ["футбол", "чтение", "путешествия"]
}

Особенности:

  • Каждый документ имеет уникальный идентификатор _id.
  • Можно хранить вложенные объекты и массивы.
  • Структура документа может отличаться от других в той же коллекции.

Создание БД

use databaseName

Данная команда переключает на существующую бд.
Но если бд не существует то она создаст и переключит

Создание колекции

db.createCollection("users")

Добавление записи в колекцию

db.users.insert({
    name:"Deniel",
    age:25
})

Добавление большого кол-ва записей в колекцию

db.users.insertMany([
    {name:"Nastja", age:24},
    {name:"Gabriel", age:19},
    {name:"Gerke", age:20},
    {name:"Azam", age:91},
    {name:"Zhan", age:19},
    {name:"Anja", age:18},
])

Найти пользователей, у которых имя Zhan или возраст 19.

db.users.find({$or:[{name:"Zhan"},{age: 19}]})

Найти всех, у кого возраст меньше 20

db.users.find({age:{$lt:20}})

Операторы сравнения:

$lt -- меньше

$gt -- больше

$lte -- меньше или равно

$gte -- больше или равно

$ne -- не равно

Сортировка по убыванию возраста.

sort({age:-1})

Сортировка по возрастанию возраста.

sort({age:1})

Поиск по ObjectId:

db.users.findOne({_id:ObjectId("682dad488a354e6c0501f922")})

Обновление данных:

db.users.updateOne(
    {name:"Zhan"},
    {
        $set: {
            name: "ilon mark",
            age:27
        }
    }
)

Множественные операции (bulkWrite):

db.users.bulkWrite([
    {
        insertOne: {
            document:{name: "Aloha", age:27}
        }
    },
    {
        deleteOne: {
            filter: {fullname: "Zhan"}
        }
    }
])

Добавление вложенного массива:

db.users.update(
    {fullname: "zhan"},
    {
        $set: {
            posts:[
                {title: 'javascript', text: 'js top'},
                {title: 'mongo', text: 'mongo database'}
            ]
        }
    }
)

Поиск вложенных документов:

db.users.findOne(
    {fullname:"Zhan"},
    {posts:1}
)

Пример подключения к базе данных MongoDB Cloud

const {MongoClient} = require('mongodb');
const client = new MongoClient('mongodb+srv://zangerke3:rSjr1tfwLPax6rq9@cluster1.mhy3ahw.mongodb.net/?retryWrites=true&w=majority&appName=Cluster1')
const start = async () => {
    try {
        await client.connect();
        console.log('Connected');
        await client.db().createCollection('users')
        const users = client.db().collection('users');
        await users.insertOne({name: 'John Doe', age: 15})
        const user = await users.findOne({name: 'John Doe'})
        console.log(user)
    }
    catch (error) {
        console.log(error);
    }
}

start()

Описание данного кода

const {MongoClient} = require('mongodb');

Импортируем класс MongoClient из mongodb. Класс нужен для установки соединения с базой данных MongoDB

const client = new MongoClient('mongodb+srv://zangerke3:rSjr1tfwLPax6rq9@cluster1.mhy3ahw.mongodb.net/?retryWrites=true&w=majority&appName=Cluster1')

Создаём новый экземпляр клиента MongoDB, указывая строку подключения к облачному MongoDB. В строке подключения содержатся:

  • имя пользователя (zangerke3),
  • пароль (rSjr1tfwLPax6rq9),
  • адрес кластера,
  • дополнительные параметры.
const start = async () => {
    try {
        await client.connect();
        console.log('Connected');

Определяем функцию которая устанавливает соединение с MongoDB с помощью client.connect(). Если подключение успешно, принтует сообщение “Connected”.

await client.db().createCollection('users')

Создаёт новую коллекцию с именем users в бд по умолчанию

const users = client.db().collection('users');

получение коллекции для работы

await users.insertOne({name: 'John Doe', age: 15})

Вставляет один новый документ в коллекцию users.

const user = await users.findOne({name: 'John Doe'})
        console.log(user)

Ищет документ в коллекции users, где поле name равно “John Doe”.

В результат (найденный документ) сохраняется в переменную user и выводится в консоль.

    }
    catch (error) {
        console.log(error);
    }
}

Если возникает ошибка она попадает в блок catch и выводится в консоль.

Вызывается функция start для запуска всего описанного выше процесса.

Итог:

Этот скрипт подключается к MongoDB в облаке, создаёт коллекцию users, добавляет в неё одного пользователя с именем и возрастом, ищет и выводит этого пользователя.