Что такое 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-файла расширения
- Поместить её в папку
ext
PHP (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();
}
?>

