MONGO DB

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

Основные термины MongoDB

Термин (MongoDB)Аналог в SQL
DatabaseБаза данных
CollectionТаблица
DocumentСтрока (но гибкая)
FieldСтолбец

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

  • Гибкая структура данных: разные документы в одной коллекции могут иметь разные поля.
  • Без схемы: не нужно заранее указывать, какие будут поля (в отличие от SQL).
  • Хорошо масштабируется: MongoDB легко адаптируется под большие объемы данных.
  • Быстро работает с JSON-подобными объектами: отлично подходит для веб-приложений, особенно на Node.js.

Расмотрим MongoDB

Первый взгяд, видим все базы данных

Далее разбирем команды в терменале:

show databases;

Показывает список всех баз данных.

use mongo

Переключение на базу данных mongo. Если такой базы нет — она будет создана при первом сохранении данных.

db.createCollection("user");

Создаёт коллекцию user в текущей базе данных.

show collections;

Показывает список коллекций (таблиц) в текущей базе данных.

db.dropDatabase();

Удаляет текущую базу данных (в данном случае mongo).

🔍 Поиск данных

Далее снова создаем базу данных, используем ее создаем колекцию

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

Показывает предупреждение, что insert() устарел. Лучше использовать insertOne()/insertMany().

db.users.insertMany([
    {name: "John", age: 25,},
    {name: "Mary", age: 27,},
    {name: "Kate", age: 21,},
    {name: "Nora", age: 30,},
]);

Добавляет сразу несколько документов (записей).

db.users.find({age:25});

Ищет всех пользователей, у кого age = 25.

db.users.find({$or: [{name: "Mary"}, {age:27}]});

Логическое ИЛИ — найдёт всех, у кого name = "Mary" или age = 27.

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

Найдёт всех, у кого возраст меньше 28 ($lt — less than).

db.users.find({age: {$gt: 28}});

Найдёт всех, у кого возраст больше 28 ($gt — greater than).

📊 Сортировка и ограничение результатов

db.users.find().sort({age: -1});

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

db.users.find().limit(2);

Покажет только 2 первых результата.

🔎 Поиск по ID

db.users.findOne({ _id: ObjectId('682d84241c8d2207adf3de8f')});

db.users.findOne({ _id: ObjectId(‘…’) });
Найдёт одного пользователя по ID.

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

db.users.update(
    {name: "John"},
    {
        $set:{
            name: "Ilon Mask",
            age: 45,
        }
    }
)

Заменит имя и возраст для первого найденного John. Но метод update устарел — лучше использовать updateOne.

db.users.updateMany(
    {name: "John"},
    {
        $set: {
            name: "Ilon Mask",
            age: 45
        }
    }
)

Обновит всех John сразу.

Спомощью db.users.find(); можно увидить все результаты

❌ Удаление данных

db.users.deleteOne({age: 45});

Удаляет одного пользователя с возрастом 45.

🔄 Массовые операции bulkWrite

db.users.bulkWrite([
    {
        insertOne: {
            document: {fullName: "Nora", age: 30}
        }
    },
    {
        deleteOne: {
            filter: {fullName: "Mary"}
        }
    }
])

Выполняет 2 действия:

  1. Добавляет нового пользователя Nora.
  2. Удаляет пользователя Mary.

Проверяем

🧩 Добавление массива (вложенные документы)

db.users.update(
    {fullName: "Nora"},
    {
        $set: {
            post: [
                {title: 'javascript', text: 'js top'},
                {title: 'mongo', text: 'mongo database'}
            ]
        }
    }
)

Добавляет в профиль Nora поле post — это массив объектов.

Проверяем db.users.find();

🔎 Поиск вложенных данных

db.users.find({
    post: {
        $elemMatch: {
            title: "javascript"
        }
    }
})

Найдёт пользователя, у которого в массиве post есть элемент с title: "javascript".

Подключение базы данных MongoDB Cloud через Node.js

Первое, что начнем заходим в WebStorm -> new project

Открываем терминал и прописываем команды:

  • npm init -y – создаёт package.json файл с настройками по умолчанию для проекта Node.js, -y означает “yes to all”
  • npm i mongodb / npm install mongodb – устанавливает официальную библиотеку MongoDB для Node.js.

Открываем package.json и проверяем установился ли mongodb

Заходим в MongoDB Cloud (сменила проектр т.к. больше не дава сделать еще clusterid)

Выбираем Create Clusters и создаем новый кластер

Первым этапом будет нужно уставить IP address на 0.0.0.0/0

Выбираем тип подключения –> Drivers

Копируем ссылку для подключения базы данных к Node.js

Создаем фаил indexjs.js и пишем данный код:

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

const client = new MongoClient('mongodb+srv://JekGuz:s5X9zFiyeaK9b4e4@cluster0.twhl3tc.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0')


const start = async () => {
    try {
        await client.connect();
        console.log('Работает!!!')
    } catch (e) {
        console.log(e)
    }
}
 
start()

Этот код подключается к базе данных MongoDB в облаке. Сначала он создаёт “клиента” для подключения, затем пробует установить соединение. Если всё прошло успешно — в консоли появится сообщение “Работает!!!”. Если произойдёт ошибка — она будет выведена на экран.

База данных подключена.

Теперь мы можем создать коллекцию и добавить в неё пользователей.

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

const client = new MongoClient('mongodb+srv://JekGuz:s5X9zFiyeaK9b4e4@cluster0.twhl3tc.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0')

const start = async () => {
    try {
        await client.connect()
        console.log('Работает!!!')
        await client.db().createCollection('users');
        const users = client.db().collection('users');
        await users.insertOne({fullName: 'ulbi', age: 21})
        const user = await users.findOne({fullName: 'ulbi', age: 21})
        console.log(user)
    } catch (e) {
        console.log(e)

    }
}

start()

Получаем результат и видим его в логах.

Проверяем через графическую оболочку в MongoDB Cloud

Все работает.