Что такое MongoDB?
MongoDB — это документо-ориентированная база данных NoSQL, в которой данные хранятся в формате JSON-подобных документов. Она используется для хранения больших объемов данных и отличается гибкостью структуры и высокой производительностью.
Основные понятия:
1. Коллекция (“collection”)
- Аналог таблицы в реляционных базах данных.
- Хранит группу документов.
- В одной коллекции могут быть документы с разной структурой (необязательно одинаковыми полями).
2. Документ (“document”)
- Основная единица хранения данных в MongoDB.
- Представляет собой JSON-подобный объект (в формате BSON — Binary JSON).
Особенности MongoDB:
- Гибкая схема: можно добавлять документы с разными полями.
- Хорошо масштабируется горизонтально.
- Подходит для приложений, где важна скорость и гибкость (например, веб-приложения, аналитика).

Команда db.users.find() используется в MongoDB для поиска (чтения) всех документов в коллекции users.
Что делает:
- Обращается к коллекции
users. - Возвращает все документы, которые в ней находятся.

Команда db.users.find({ age: { $lt: 30 } }) в MongoDB используется для поиска всех документов, в которых значение поля age (возраст) меньше 30.
db.users— обращение к коллекцииusers..find(...)— метод поиска документов.{ age: { $lt: 30 } }— условие:
age— поле, по которому фильтруем.$lt(less than) — оператор “меньше”.30— значение, с которым сравниваем.

Команда db.users.find({ age: { $lte: 28 } }) используется для поиска всех документов, у которых поле age (возраст) меньше или равно 28.
db.users— коллекцияusers..find(...)— поиск документов.{ age: { $lte: 28 } }— фильтр:
age— поле “возраст”.$lte— оператор “меньше или равно” (less than or equal).28— значение, с которым сравниваем.

Команда db.users.find({ age: { $gt: 30 } }) в MongoDB используется для поиска всех документов, у которых поле age (возраст) строго больше 30.
db.users— коллекцияusers..find(...)— метод поиска.{ age: { $gt: 30 } }— условие:
age— поле “возраст”.$gt(greater than) — больше.30— значение, с которым сравниваем.

Команда db.users.find({ age: { $gte: 28 } }) используется для поиска всех документов, у которых поле age (возраст) больше или равно 28.
db.users— обращение к коллекцииusers..find(...)— метод поиска.{ age: { $gte: 28 } }— фильтр:
age— поле “возраст”.$gte— оператор “больше или равно” (greater than or equal).28— значение для сравнения.

Команда db.users.find({ $or: [ { name: "ulbitv" }, { age: 35 } ] }) используется для поиска документов, которые соответствуют хотя бы одному из условий.
$or— логический оператор ИЛИ.[ {...}, {...} ]— массив условий.
Условие выполнится, если хотя бы одно из указанных условий верно:
- имя пользователя —
"ulbitv"
ИЛИ - возраст —
35

Команда db.users.find({ age: { $ne: 28 } }) используется в MongoDB для поиска всех документов, в которых поле age не равно 28.
age— поле “возраст”.$ne(not equal) — оператор “не равно”.28— значение, которое исключается из результатов.

Команда db.users.find().sort({ age: -1 }) используется в MongoDB для получения всех документов из коллекции users, отсортированных по убыванию значения поля age.
find()— получает все документы.sort({ age: -1 })— сортирует результаты по полюage:
-1означает по убыванию (от большего к меньшему).1означал бы сортировку по возрастанию.

Команда db.users.find().sort({ age: 1 }) в MongoDB используется для получения всех документов из коллекции users, отсортированных по возрасту (age) в порядке возрастания.
find()— получает все документы из коллекцииusers.sort({ age: 1 })— сортирует по полюage:
1— по возрастанию (от меньшего к большему).-1— по убыванию (если нужно наоборот).

Команда db.users.deleteOne({ age: 24 }) используется в MongoDB для удаления одного документа из коллекции users, в котором поле age равно 24.
deleteOne()— удаляет первый найденный документ, который соответствует условию.{ age: 24 }— фильтр поиска документа с возрастом 24.
Что происходит:
- Если в коллекции есть несколько документов с
age: 24, будет удалён только первый найденный. - Если документов с таким возрастом нет, ничего не удалится.

Команда db.users.find().limit(4) в MongoDB используется для получения первых 4 документов из коллекции users.
find()— выбирает все документы из коллекцииusers.limit(4)— ограничивает количество возвращаемых документов до 4.
Если в коллекции 10 пользователей, то результатом будет первые 4 документа (в порядке по умолчанию).

Команда db.users.findOne({_id: ObjectId('682d83902fab332b428eeeee')}) используется в MongoDB для поиска одного документа в коллекции users по его уникальному идентификатору _id.
findOne()— возвращает первый документ, который соответствует условию.{_id: ObjectId('682d83902fab332b428eeeee')}— фильтр по полю_id:
_id— уникальный идентификатор документа в MongoDB.ObjectId('...')— специальный тип данных, используемый для хранения_id.
Что делает команда:
- Ищет документ с конкретным
_id. - Возвращает один документ (или
null, если не найден).

Команда используется в MongoDB для переименования поля name в fullname во всех документах коллекции users.
updateMany()— обновляет все документы, которые соответствуют фильтру.{}— пустой фильтр, значит обновляем все документы в коллекции.$rename— оператор обновления, который переименовывает поле:name— старое имя поля.fullname— новое имя поля.
Что происходит:
- Во всех документах коллекции
usersполеnameбудет заменено наfullname. - Если у документа нет поля
name, он не изменится.

Команда используется в MongoDB для выполнения нескольких операций обновления (bulk операции) за один запрос.
db.users.bulkWrite([
{
insertOne: {
document: {fullname: "nastya", age:18}
}
},
{
deleteOne: {
filter: {fullname: "petya"}
}
}
]
)
bulkWrite()— выполняет несколько операций (вставка, удаление, обновление) в одной транзакции.- В массиве передаются объекты с операциями:
insertOne— вставить новый документdeleteOne— удалить один документ
Что происходит:
- Добавляется новый пользователь
nastyaс возрастом 18. - Удаляется первый найденный пользователь с
fullname: "petya".
Почему bulkWrite полезен:
- Эффективнее, чем выполнять операции по отдельности.
- Позволяет сгруппировать изменения и выполнить их атомарно (если используется с транзакциями).


Команда
db.users.update(
{fullname: "nastya"},
{
$set: {
posts: [
{title: 'javascript', text: 'js top'},
{title: 'mongo', text: 'mongo database'}
]
}
}
)
используется в MongoDB для обновления первого документа, где fullname равен "nastya", и добавления (или замены) поля posts с массивом постов.
{ fullname: "nastya" }— фильтр, ищем пользователя с таким именем.$set— оператор обновления, который устанавливает или заменяет указанное поле.posts— новое поле, содержащее массив объектов с информацией о постах.
Что происходит:
- В документе пользователя
nastyaполеpostsбудет создано или перезаписано массивом:
[
{ "title": "javascript", "text": "js top" },
{ "title": "mongo", "text": "mongo database" }
]


Команда
db.users.findOne(
{fullname: "nastya"},
{posts:1} //хотим увидеть все posts
)
используется в MongoDB для поиска одного документа, где fullname равно "nastya", и вывода только поля posts.

Команда
db.users.find(
{
posts: {
$elemMatch: {
title: "javascript"
}
}
}
)
используется в MongoDB для поиска всех документов, у которых в массиве posts есть элемент с полем title, равным "javascript".
Разбор команды:
posts— поле-массив в документе.$elemMatch— оператор, который ищет элемент массива, удовлетворяющий заданному условию.{ title: "javascript" }— условие для элемента массива.
Что делает команда:
- Возвращает все документы, где в
postsесть хотя бы один объект с"title": "javascript".

Команда db.users.find({posts:{$exists:true}}) используется в MongoDB для поиска всех документов, у которых есть поле posts.
Разбор команды:
posts— поле, которое проверяется.$exists: true— оператор, который возвращает документы, где полеpostsсуществует (то есть неnullи не отсутствует).
Что делает команда:
- Возвращает все документы, у которых есть поле
posts(независимо от значения).

Как подключиться к MongoDB Atlas (облачная версия MongoDB) с помощью PHP:
1. Что нужно заранее
- PHP версии 7.1 или выше
- Установленный Composer — менеджер пакетов для PHP
- Аккаунт на MongoDB Atlas
- Установленное расширение
mongodbдля PHP
2. Установка необходимых компонентов
2.1
Для Windows:
- На сайте: https://pecl.php.net/package/mongodb cкачать нужную версию
.dll- Выбрать правильную версию DLL-файла расширения
mongodbдля Windows нужно, ориентируясь на:- Разрядность (x64 или x86) — зависит от PHP (можно точно проверить командой
php -i | findstr Architecture) - Thread Safety (TS) или Non Thread Safe (NTS) — зависит от сборки PHP
Это можно узнать командой: php -i | findstr “Thread”.
Если выводитThread Safety => enabled, значит нужна Thread Safe (TS) версия.
- Разрядность (x64 или x86) — зависит от PHP (можно точно проверить командой
- Выбрать правильную версию DLL-файла расширения
- Поместить её в папку
extPHP (C:\xampp\php\ext) - Добавить в
php.ini(C:\xampp\php):extension=mongodb - Проверить, что расширение установлено:

2.2
Установка библиотеки MongoDB через Composer:
Открыть терминал в папке с проектом и выполнить:composer require mongodb/mongodb


3. Получить строку подключения к MongoDB Atlas
- Войти в свой аккаунт на MongoDB Atlas
- Выбрать свой кластер → Connect

- Выбрать “Connect your application”

- Выбрать драйвер
PHPи скопировать строку подключения
4. Пример подключения и вставки данных в MongoDB через PHP
<?php
require 'vendor/autoload.php';
use MongoDB\Client;
use MongoDB\Driver\Exception\Exception as MongoException;
try {
// 1. Подключение к MongoDB
$uri = " "; // строка подключения для каждого своя
$client = new Client($uri);
// 2. Проверка подключения
$client->listDatabases(); // Простая проверка соединения
// 3. Выбор базы и коллекции
$database = 'mongodb'; // Название БД
$collectionName = 'users'; // Название коллекции
$collection = $client->$database->$collectionName;
// 4. Вставка документа
$result = $collection->insertOne([
'name' => 'Lilith',
'age' => 25,
'created_at' => new MongoDB\BSON\UTCDateTime()
]);
// 5. Вывод результата
echo "Успешно добавлен документ с ID: " . $result->getInsertedId();
} catch (MongoException $e) {
// Обработка ошибок MongoDB
echo "Ошибка MongoDB: " . $e->getMessage();
} catch (Exception $e) {
// Общие ошибки
echo "Ошибка: " . $e->getMessage();
}
?>

