Работа с MongoDB

MongoDB - NoSQL нереляционная до­ку­мен­то­о­ри­ен­ти­ро­ван­на­я система управления базами данных (СУБД) с открытым исходным кодом, написанная на языке C++, использующая гибкий JSON-формат документов и схему базы данных. Упрощает выборку и агрегацию данных, поддерживает создание кластеров и репликацию (копирование данных из одного источника на другой (или на множество других) и наоборот).

Преимущества MongoDB

  • Отсутствие схемы - данная БД основана на коллекциях различных документов. Количество полей, содержание и размер этих документов может отличаться. Т.е. различные сущности не должны быть идентичны по структуре (не нужно постоянно заботиться о строгом формате документа)
  • Легкая масштабируемость
  • Для хранения данных в текущий момент используется оперативная память сервера, что позволяет получать к ним более быстрый доступ
  • Данные хранятся в виде JSON документов. Это богатая структура данных, способная хранить массивы и другие документы
  • MongoDB поддерживает динамические запросы в документах (document-based query), используя язык запросов на основе документов, который почти такой же мощный, как SQL (только не нужно учить SQL ;)
  • Отсутствие сложных JOIN запросов

Для тех, кто привык работать с реляционными БД, приводим схему соответствия с MongoDB

RDBMS:
Database
Tables
Rows
Columns
MongoDB:
Database
Collections
Documents
Fields
Как подключить MongoDB к своему аккаунту?

Всё, что нужно сделать для начала работы с MongoDB - подключить данную услугу в панели управления аккаунтом во вкладке «Дополнительные услуги»

Начиная с версии MongoDB 3.2, механизмом хранения данных (т.н. «storage engine») по умолчанию является WiredTiger.
WiredTiger использует контроль параллельных операций записи на уровне «документа». Это значит что несколько клиентских приложений могут модифицировать разные «документы» в коллекции единовременно.
Механизм WiredTiger использует оперативную память для внутреннего кеша (т.н. «internal cache»), в котором хранится информация из базы данных, для максимально быстрого доступа к документам.

Для установки MongoDB на хостинге Hostland доступно несколько тарифов, с разным размером «internal cache»:

  • 256Mb - 60 руб/мес
  • 512Mb - 90 руб/мес
  • 1024Mb - 120 руб/мес

Хранимые данные в MongoDB будут доступны только Вашему аккаунту. Параметры подключения по умолчанию:
host: localhost
port: 27017

Варианты работы с MongoDB:
Работа с MongoDB через terminal SSH?
// подключение к MongoDB
[user@server ~]$ mongo

// создание БД
use Company

// создание коллекции
db.createCollection(
    "employees", {
        validator: {
            name: {$type: "string"}, 
            surname: {$type: "string"}, 
            age: {$type: "number"}
        }
    }
);

// добавление документов в коллекцию
db.employees.insert({name: "Ivan", surname: "Petrov", age: 32});
db.employees.insert({name: "Vasiliy", surname: "Ivanov", age: 37});
db.employees.insert({name: "Marina", surname: "Stepanova", age: 28});

// вывод всех документов из коллекции
db.employees.find();
Работа с MongoDB средствами NodeJS?
// подключение Express
const express = require('express');
const app = express();

// использование плагина mongodb
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017';
const dbName = 'CLIENTS';

// добавление, удаление и вывод коллекции на экран
app.get('/test', function(req, res, next) {
    // подключение к БД
    MongoClient.connect(url, function(err, client) {
        console.log("Connected successfully to test");
        const db = client.db(dbName);
        
        // добавление документов
        /*
        db.collection('test', function(err, collection) {
         collection.insert({'name':'Liza', 'age': 12});
         collection.insert({'name':'Agatha', 'age': 20});
         collection.insert({'name':'Sam', 'age': 6});
        }); */
        
        // удаление документов
        /*
        db.collection("test").deleteMany({name: "Liza"}, function(err, result) {
         console.log(result);
        }); */
        
        // создание коллекции
        const cltn = db.collection('test');
        
        // вывод записей на страницу
        cltn.find({}).toArray(function(err, docs) {
            let str = '';
            docs.forEach((item) => {
                str += item.name + ' ';
                str += item.age + '<br>';
            });
            res.send(str);
        });
    });
});

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});
Работа с MongoDB средствами PHP?
// установка соединения с БД
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

// первая команда - пингование сервера
$command = new MongoDB\Driver\Command(['ping' => 1]);
$cursor = $manager->executeCommand('db', $command);
$response = $cursor->toArray()[0];    
print_r($response);

// записываем (при повторном запуске - дозаписываем) в БД некий двумерный масив
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->insert(['x' => 1, 'y' => 'foo']);
$bulk->insert(['x' => 2, 'y' => 'bar']);
$bulk->insert(['x' => 3, 'y' => 'bar']);
$manager->executeBulkWrite('db.collection', $bulk);

// группируем элементы массива в базе по осям
$command = new MongoDB\Driver\Command([
    'aggregate' => 'collection',
    'pipeline' => [
        ['$group' => ['_id' => '$y', 'sum' => ['$sum' => '$x']]],
    ],
    'cursor' => new stdClass,
]);
$cursor = $manager->executeCommand('db', $command);

// выводим результат группировки массива
foreach ($cursor as $document) {
    print_r($document);
}

Для взаимодействия с MongoDB мы рекомендуем использовать GUI(графический интерфейс) Compass, специально разработанный для работы с данными MongoDB. Подробнее о Compass Вы можете узнать из данной статьи

Удачной работы! Если возникнут вопросы - напишите нам, пожалуйста, тикет из панели управления хостингом, раздел «Написать нам».