Mongo / noSQL andmebaas

📌 Что такое MongoDB

MongoDB — это база данных, в которой информация хранится не в таблицах, как в обычных базах, а в виде документов, похожих на JSON (или словарь в Python).

Проще говоря:

MongoDB — это как шкафчик с ящиками, где каждый ящик (документ) содержит информацию в удобном формате “ключ: значение”, и можно хранить что угодно.


📁 Коллекция (Collection)

Коллекция — это как папка, в которой хранятся документы.
Похожа на таблицу в SQL, но тут нет фиксированных столбцов — каждый документ может быть уникальным.

Пример: Коллекция users может содержать документы про разных пользователей.


📄 Документ (Document)

Документ — это как одна запись с данными.
Он пишется в формате JSON (на самом деле BSON — это почти то же самое).
Каждый документ — это как структура данных или словарь:

{
  "name": "John",
  "age": 30,
  "email": "john@example.com"
}

Это как один пользователь в коллекции пользователей.

🆔 Поле _id

Каждый документ автоматически получает уникальный ID (_id) — как паспорт.
Ты можешь сам его задать или MongoDB сделает это за тебя.


📎 База данных (Database)

База данных в MongoDB — это как главная папка, в которой лежат коллекции.

MongoDB → База данных → Коллекции → Документы


🧰 Другие важные термины:

ТерминПояснение
BSONВнутренний формат MongoDB (как JSON, но быстрее и с типами данных)
CRUDОперации с данными: Create (создать), Read (читать), Update (обновить), Delete (удалить)
IndexКак оглавление книги — помогает быстро находить нужные документы
QueryЗапрос — способ найти нужные документы по условиям
AggregationМощный инструмент для анализа и подсчётов, как GROUP BY в SQL

Пример кода с пояснениями с урока

db.users.insert({
    name: "Gleb",
    age:31
})

db.users.insertMany([
    {name: "vasya", age: 28},
    {name: "petya", age: 38},
    {name: "kolja", age: 18},
    {name: "irina", age: 48},
    {name: "marina", age: 58}
])

db.users.find() - отобразить всех юзеров

db.users.find({age:28}) - покажет всех чей возраст 28

db.users.find({$or:[{name:"petya"}, {age:18}]}) - проверит всех Петь и еще те  у кого возраст 18

db.users.find({age:{$lt:28}}) - lt less than / меньше чем

db.users.find({age:{$gt:28}}) - gt grater than / больше чем

db.users.find({age:{$gte:28}}) -gte equals / больше либо равно

db.users.find({age:{$ne:28}}) - not equals не равен

db.users.find().sort({age:-1}) - (-1)сортировка на убывание

db.users.find().sort({age:1}) - (1) сортировка по возрастанию

db.users.find().limit(2) - отображает первые 2 записи

db.users.findOne({_id:ObjectId('682d82a0320c55eb0a1ba734')}) - показывает именно по этому ID

db.users.update(
{name:"Gleb"},
{
    $set:{
        name: "Ilon mask",
            age: 45
    }
}
)
-меняем/устанавливаем данные (обновляем) что ищем на что заменяем

db.users.updateMany(
    {},
    {
        $rename:{
            name: "fullname",
        }
    }
)
--меняем название поля

db.users.deleteOne({age:45}) - удалить по критерию

db.users.bulkWrite([
    {
        insertOne: {
            document: {fullname: "nastya", age: 18}
        }
    },
    {
        deleteOne: {
            filter: {fullname: "petya"}
        }
    }
])

-добавили пользователя, и удалили одного

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

-добавили запись пользователю Вася

db.users.findOne(
    {fullname: "vasya"},
    {posts:1}
)
-отобразить посты пользователя

db.users.find(
    {
        posts:{
            $elemMatch:{
                title: 'javascript'
            }
        }
    }
)
-отобразить пользователя у которого есть определенный пост


db.users.find({posts: {$exists:true}}) - показывает у кого есть посты


Подключение через PHP

🔍 1. Узнай версию своего PHP

В терминале (в PHPStorm):

php -i | findstr "PHP Version"

📥 Скачай правильный php_mongodb.dll // на основании своей версии, изначально скачал не ту, АПАЧ выбивал ошибку. https://pecl.php.net/package/mongodb/1.16.0/windows

закидываем его в папку XAMPP – PHP – EXT (расширения)
далее нужно прописать в php.ini это расширение (без ; это раскоментит его)
extension=php_mongodb.dll

🔁 Перезапусти Apache в XAMPP

🔁 Перезапусти PHPStorm

php -m | findstr mongodb

должно отобразится установленное расширение mongo

Далее устанавливаем соеднение с кластером и проверяем, при запуске в логах должно отобразится “успешное подключение”

<?php

// Строка подключения (замени <db_password> на настоящий пароль!)
$uri = "mongodb+srv://glebdranitsyn:qwerty12345@cluster0.ke7lhpz.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0";

try {
    // Подключаемся
    $manager = new MongoDB\Driver\Manager($uri);
    echo "✅ Успешное подключение к MongoDB Atlas<br>";

    // Простой запрос к коллекции testDB.users
    $query = new MongoDB\Driver\Query([]);
    $cursor = $manager->executeQuery("testDB.users", $query);

    echo "<h3>Документы из коллекции users:</h3>";
    foreach ($cursor as $doc) {
        echo "<pre>";
        print_r($doc);
        echo "</pre>";
    }

} catch (MongoDB\Driver\Exception\Exception $e) {
    echo "❌ Ошибка: " . $e->getMessage();
}

можно так же и через браузер запустить

Добавим документ / для того что бы на cloudMongo отобразилась testDB

<?php

// Строка подключения (твоя строка — всё правильно)
$uri = "mongodb+srv://glebdranitsyn:qwerty12345@cluster0.ke7lhpz.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0";

try {
    // Подключение
    $manager = new MongoDB\Driver\Manager($uri);
    echo "✅ Успешное подключение к MongoDB Atlas<br>";

    // 👉 Добавим документ
    $bulk = new MongoDB\Driver\BulkWrite;
    $bulk->insert([
        "name" => "Alice",
        "email" => "alice@example.com",
        "created_at" => new MongoDB\BSON\UTCDateTime()
    ]);

    $manager->executeBulkWrite("testDB.users", $bulk);
    echo "🟢 Документ добавлен в коллекцию users<br><br>";

    // 👉 Читаем все документы
    $query = new MongoDB\Driver\Query([]);
    $cursor = $manager->executeQuery("testDB.users", $query);

    echo "<h3>Документы из коллекции users:</h3>";
    foreach ($cursor as $doc) {
        echo "<pre>";
        print_r($doc);
        echo "</pre>";
    }

} catch (MongoDB\Driver\Exception\Exception $e) {
    echo "❌ Ошибка: " . $e->getMessage();
}