Node.js, express и mongodb: api за полчаса

Получение записи¶

Для получения всех записей в коллекции используйте метод экземпляра коллекции.


Методу в качестве параметра можно передать объект, выполняющий роль фильтра для извлекаемых записей. Например, в следующем примере возвращаются все записи, у которых поле равно .

Чтобы получить только первую запись выборки, используйте метод .

Для получения n-первых записей имеется метод , принимающий количество возвращаемых записей.

Сортировка полученного результата осуществляется с помощью метода , который принимает объект, в котором ключ — сортирующее поле, а значение — порядок сортировки ( — по возрастанию, а — по убыванию).

Ограничение по выборке и сортировку можно задать в объекте, передаваемом вторым необязательным параметром.

С полным списком параметров можно ознакомиться в .

Устройство базы данных. Документы

Последнее обновление: 25.03.2018

Всю модель устройства базы данных в MongoDB можно представить следующим образом:

Если в реляционных бд содержимое составляют таблицы, то в mongodb база данных состоит из коллекций.

Каждая коллекция имеет свое уникальное имя — произвольный идентификатор, состоящий из не более чем 128 различных алфавитно-цифровых символов и знака подчеркивания.

В отличие от реляционных баз данных MongoDB не использует табличное устройство с четко заданным количеством столбцов и типов данных. MongoDB является документо-ориентированной системой, в которой центральным понятием является документ.

Документ можно представить как объект, хранящий некоторую информацию. В некотором смысле он подобен строкам в реляционных субд, где строки хранят информацию об отдельном элементе. Например, типичный документ:

{
    "name": "Bill",
    "surname": "Gates",
    "age": "48",
    "company": {
        "name" : "microsoft",
        "year" : "1974",
        "price" : "300000"
        }
}

Документ представляет набор пар ключ-значение. Например, в выражении name представляет ключ, а Bill — значение.

Ключи представляют строки. Значения же могут различаться по типу данных. В данном случае у нас почти все значения также представляют строковый тип, и лишь один ключ (company) ссылается на отдельный объект. Всего имеется следующие типы значений:

  • String: строковый тип данных, как в приведенном выше примере (для строк используется кодировка UTF-8)
  • Array (массив): тип данных для хранения массивов элементов
  • Binary data (двоичные данные): тип для хранения данных в бинарном формате
  • Boolean: булевый тип данных, хранящий логические значения или , например,
  • Date: хранит дату в формате времени Unix
  • Double: числовой тип данных для хранения чисел с плавающей точкой
  • Integer: используется для хранения целочисленных значений, например,
  • JavaScript: тип данных для хранения кода javascript
  • Min key/Max key: используются для сравнения значений с наименьшим/наибольшим элементов BSON
  • Null: тип данных для хранения значения
  • Object: строковый тип данных, как в приведенном выше примере
  • ObjectID: тип данных для хранения id документа
  • Regular expression: применяется для хранения регулярных выражений
  • Symbol: тип данных, идентичный строковому. Используется преимущественно для тех языков, в которых есть специальные символы.
  • Timestamp: применяется для хранения времени

В отличие от строк документы могут содержать разнородную информацию. Так, рядом с документом, описанным выше, в одной коллекции может находиться другой объект, например:

{
    "name": "Tom",
    "birthday": "1985.06.28",
	"place" : "Berlin",
	"languages" :
}

Казалось бы разные объекты за исключением отдельных свойств, но все они могут находиться в одной коллекции.

Еще пара важных замечаний: в MongoDB запросы обладают регистрозависимостью и строгой типизацией. То есть следующие два документа не будут идентичны:

{"age" : "28"}
{"age" : 28}

Если в первом случае для ключа age определена в качестве значения строка, то во втором случае значением является число.

Идентификатор документа

Для каждого документа в MongoDB определен уникальный идентификатор, который называется . При добавлении документа в коллекцию данный идентификатор создается автоматически. Однако разработчик может сам явным образом задать идентификатор, а не полагаться на автоматически генерируемые, указав соответствующий ключ и его значение в документе.

Данное поле должно иметь уникальное значение в рамках коллекции. И если мы попробуем добавить в коллекцию два документа с одинаковым идентификатором, то добавится только один из них, а при добавлении второго мы получим ошибку.

Если идентификатор не задан явно, то MongoDB создает специальное бинарное значение размером 12 байт. Это значение состоит из нескольких сегментов: значение типа размером 4 байта, идентификатор машины из 3 байт, идентификатор процесса из 2 байт и счетчик из 3 байт. Таким образом, первые 9 байт гарантируют уникальность среди других машин, на которых могут быть реплики базы данных. А следующие 3 байта гарантируют уникальность в течение одной секунды для одного процесса. Такая модель построения идентификатора гарантирует с высокой долей вероятности, что он будет иметь уникальное значение, ведь она позволяет создавать до 16 777 216 уникальных объектов ObjectId в секунду для одного процесса.

НазадВперед

Использование CRUD методов

После успешного соединения с базой данных, мы можем начать добавлять и изменять данные в нашей коллекции. Тип Collection содержит в себе методы позволяющие отправлять запросы в базу данных.

Вставка (создание) документов

Для начала необходимо создать несколько новых структур Trainer для вставки в базу данных:

Для того чтобы всавить одиночный документ следует использовать метод collection.InsertOne():

Для вставки нескольких документов одновременно существут метод collection.InsertMany():

Обновление документов

Метод collection.UpdateOne() позволяет обновить один документ. Требуется создать фильтр для поиска документа в базе данных и документ для операции обновления. Вы можете создать их, используя типы bson.D:

Следующий код найдет документ, в котором поле name совпадает со значением Ash и увеличит значение age на 1.

Поиск документов

Чтобы найти документ, вам понадобится фильтр, а также указатель на переменную, в которую может быть декодирован результат.

Чтобы найти один документ, используйте collection.FindOne(). Этот метод возвращает одно значение, которое можно декодировать в переменную.

Мы будем использовать ту же переменную фильтра, которую использовали в запросе на обновление.

Чтобы найти несколько документов, используйте collection.Find().

Этот метод возвращает Cursor. Cursor предоставляет поток документов, с помощью которого можно перебирать и декодировать по одному документу за раз.

Когда документы в Cursor исчерпываются, следует закрыть Cursor. Также Cursor можно тонко настроить использую пакет options.

В нашем примере, мы устанавливаем лимит на выдачу двух документов.

Удаление документов

Вы можете удалить документы, используя collection.DeleteOne() или collection.DeleteMany(). Мы передаем nil в качестве аргумента фильтра, который будет соответствовать всем документам в коллекции. Также можно использовать collection.Drop() для удаления всей коллекции.

Установка MongoDB на Windows

Сперва качаем архив с MongoDB для win32 или win64.

Распаковываем скачанный архив и помещаем его, к примеру, на диск C, в каталог mongodb. Причём, проследите за тем, чтобы каталог bin был доступен по адресу .

Далее прописываем путь к папке bin в настройках нашей ОС, для того чтобы к .exe файлам данной папки мы могли достучаться из любого места. Итак, делаем правый клик на Компьютер — Свойства. В списке слева, выбираем “Дополнительные параметры системы”:

Далее, нажимаем на кнопку “Переменные среды”:

В открывшемся окне ищем системную переменную Path. Кликаем по ней дважды. В поле “значение переменной” переходим в самый конец, ставим знак “;” и вписываем путь к каталогу bin:

Отлично! Жмём “ок”… и переходим к следующему шагу.


Для начала, нам необходимо создать каталог, где будут храниться наши БД. К примеру, . Создаём эту папку.

Далее нам необходимо зарегистрировать MongoDB как сервис, чтобы он запускался автоматически при включении компьютера. Для этого вызываем командную строку и пишем:

echo logpath=C:\mongodb\log\mongo.log > C:\mongodb\mongod.cfg

Данная команда создаст специальный лог файл и настройки конфигурации для сервиса.

Далее создаём сервис:

mongod --config C:\mongodb\mongod.cfg --install

Прежде чем запустить его, давайте отредактируем файл , вписав туда настройку — путь к папке с нашими базами данных. В моём случае, после правки файла его содержание должно выглядеть примерно так:

logpath=C:\mongodb\log\mongo.log
dbpath=C:\databases

Возвращаемся к командной строке и запускаем сервис MongoDB:

net start MongoDB

Для того чтобы проверить, будет ли сервис запускаться автоматически, нажимаем сочетание клавиш “windows+r”, пишем “services.msc”, нажимаем ОК.

В списке сервисов ищем MongoDB и, если его тип запуска не автоматический, то выставляем данный пункт, предварительно сделав правый клик, и выбрав, “свойства”.

Теперь, когда мы создали сервис, который будет запускать MongoDB при включении компьютера, нам не нужно будет делать это вручную.

Для проверки работы MongoDB открываем командную строку и пишем:

mongo

Нажимаем Enter. Далее можем работать с данной СУБД. К примеру, посмотрим, какие сейчас у нас есть базы:

show dbs

В ответе вы должны увидеть вот такую вот строку:

local   (empty)

Connect to MongoDB using the Go Driver

Once the MongoDB Go Driver has been imported, you can connect to a MongoDB deployment using the function. You must pass a context and a object to . The client options are used to set the connection string. It can also be used to configure driver settings such as write concerns, socket timeouts, and more. The options package documentation has more information about what client options are available.

Add this code in the main function:

Once you have connected, you can now get a handle for the collection in the database by adding the following line of code at the end of the main function:

The following code will use this collection handle to query the collection.

It is best practice to keep a client that is connected to MongoDB around so that the application can make use of connection pooling — you don’t want to open and close a connection for each query. However, if your application no longer requires a connection, the connection can be closed with like so:

Run the code () to test that your program can successfully connect to your MongoDB server. Go will complain about the unused and packages and the unused variable, since we haven’t done anything with them yet. You have to comment these out until they are used to make your program run and test the connection.

Добавление данных

Последнее обновление: 25.03.2018

Установив бд, теперь мы можем добавить в нее данные. Все данные хранятся в бд в формате BSON, который близок к JSON, поэтому нам надо также вводить данные в этом формате. И хотя у нас, возможно, на данный момент нет ни одной коллекции, но при добавлении в нее данных она автоматически создается.

Как ранее говорилось, имя коллекции — произвольный идентификатор, состоящий из не более чем 128 различных алфавитно-цифровых символов и знака подчеркивания. В то же время имя коллекции не должно начинаться с префикса , так как он зарезервирован для внутренних коллекций (например, коллекция содержит всех пользователей базы данных). И также имя не должно содержать знака доллара — .

Для добавления в коллекцию могут использоваться три ее метода:

  • insertOne(): добавляет один документ

  • insertMany(): добавляет несколько документов

  • insert(): может добавлять как один, так и несколько документов

Итак, добавим один документ:

> db.users.insertOne({"name": "Tom", "age": 28, languages: })

Документ представляет набор пар ключ-значение. В данном случае добавляемый документ имеет три ключа: name, age, languages, и каждому из них сопоставляет определенное значение. Например, ключу languages в качесте значения сопоставляется массив.

Некоторые ограничения при использовании имен ключей:

  • Символ не может быть первым символом в имени ключа

  • Имя ключа не может содержать символ точки

При добавлении данных, если мы явным образом не предоставили значение для поля «_id» (то есть уникального идентификатора документа), то оно генерируется автоматически. Но в принципе мы можем сами установить этот идентификатор при добавлении данных:

> db.users.insertOne({"_id": 123457, "name": "Tom", "age": 28, languages: })

Стоит отметить, что названия ключей могут использоваться в кавычках, а могут и без кавычек.

В случае удачного добавления на консоль будет выведен идентификатор добавленного документа.

И чтобы убедиться, что документ в бд, мы его выводим функцией .

> db.users.find()

Чтобы вывести в более читабельном виде добавим метод :

> db.users.find().pretty()

Если надо добавить ряд документов, то мы можем воспользоваться методом insertMany():

> db.users.insertMany(}, 
{"name": "Alice", "age": 31, languages:}])

После добавления консоль выводит идентификаторы добавленных документов:

И третий метод — insert() демонстрирует более универсальный способ добавления документов. При его вызове в него также передается добавляемый документ:

> db.users.insert({"name": "Tom", "age": 28, languages: })

После его вызова на консоль выводится количество добавленных записей:

WriteResult({ "nInserted" : 1 })

Есть еще один способ добавления в бд документа, который включает два этапа: определение документа () и собственно его добавление:

> document=({"name": "Bill", "age": 32, languages: })
> db.users.insert(document)

При желании опять же можно с помощью функции db.users.find() убедиться, что документ попал в бд.

Возможно, не всем будет удобно вводить в одну строчку все пары ключей и свойств. Но интеллектуальный интерпретатор MongoDB на основе javascript позволяет также вводить и многострочные команды. Если выражение не закончено (с точки зрения языка JavaScript), и вы нажимаете Enter, то ввод следующей части выражения автоматически переносится на следующую строку:

Загрузка данных из файла

Данные для базы данных mongodb можно определять в обычном текстовом файле, что довольно удобно, поскольку мы можем переносить или пересылать этот файл независимо от базы данных mongodb. Например, определим где-нибудь на жестком диске файл users.js со следующим содержимым:

db.users.insertMany(},
{"name": "Lene", "age": 29, languages: },
{"name": "Kate", "age": 30, languages: }
])

То есть здесь с помощью метода insertMany добавляются три документа в коллекцию users.

Для загузки файла в текущую базу данных применяется функция load(), в которую в качестве параметра передается путь к файлу:

> load("D:/users.js")

В данном случае предполагается, что файл располагается по пути «D:/users.js».

НазадВперед

Использование

Сохранение в БД

Простой пример отношения one-to-many со ссылкой только в одну сторону (примеры будут на typescript, в конце пример на javascript):

В БД появятся две коллекции и с записями:

и

Метод был вызван только на модели , Maraquia как и положено сама позаботилась о сохранении второго документа.

Усложним пример, теперь отношение many-to-many и ссылки в обе стороны:

В БД появится коллекция с записями:

и коллекция с записями:

Вы, наверное, уже заметили отсутствие декораторов с именами вроде , , как это обычно принято для ORM. Maraquia справляется без этой дополнительной информации, hasOne или hasMany определяется значением, массив — значит hasMany. А встроенный документ или внешний (сохраняется в отдельной коллекции) определяется наличием в его схеме заполненного . Например, если в первом примере закомментировать строку и вновь запустить его, то запись появится только в коллекции и будет выглядеть так:

Кроме того тип поля перестаёт быть промисом. То есть с помощью Maraquia можно также удобно работать и со встраиваемыми документами.

Чтение из БД

Попробуем прочитать из базы что-то из ранее сохранённого:

При чтении поля было использовано ключевое слово — внешние документы достаются из базы лениво при первом чтении соответствующего поля.

Но что если необходимо иметь доступ к идентификаторам хранящимся в поле без вытаскивания соответствующих им документов из БД, но при этом опционально может понадобиться и вытащить их? Имя поля в модели соответствует имени поля в документе, но используя опцию можно изменить это соответствие. То есть определив два поля в модели ссылающихся на одно поле в документе и не указав тип для одного из них можно решить эту проблему:

Удаление документа

Метод удаляет соответствующий документ из БД. Maraquia не знает где есть ссылки на него и здесь программисту необходимо поработать самому:

В данном примере массив был заменён на новый, созданный методом , но можно менять существующий массив, Maraquia находит и такие изменения. То есть можно было так:

Валидация

Для валидации поля необходимо добавить свойство в его опции:

Так же можно передавать объекты создаваемые библиотекой joi:

Использование с javascript

Typescript — это здорово, но иногда надо без него. Для этого вместо объекта передаваемого декоратору необходимо определить статическое поле , в котором есть также поле :

Запись в поля делается через метод :

А чтение полей с внешними документами через метод :

Остальные поля читаются как обычно.

CRUD Operations

Once you have connected to the database, it’s time to start adding and manipulating some data. The type has several methods which allow you to send queries to the database.

Insert documents

First, create some new structs to insert into the database:

To insert a single document, use the method:

To insert multiple documents at a time, the method will take a slice of objects:

Update documents

The method allows you to update a single document. It requires a filter document to match documents in the database and an update document to describe the update operation. You can build these using types:

This code will then match the document where the name is Ash and will increment Ash’s age by 1 — happy birthday Ash!

Find documents

To find a document, you will need a filter document as well as a pointer to a value into which the result can be decoded. To find a single document, use . This method returns a single result which can be decoded into a value. You’ll use the same variable you used in the update query to match a document where the name is Ash.

To find multiple documents, use . This method returns a . A provides a stream of documents through which you can iterate and decode one at a time. Once a has been exhausted, you should close the . Here you’ll also set some options on the operation using the package. Specifically, you’ll set a limit so only 2 documents are returned.

Delete Documents

Finally, you can delete documents using or . Here you pass as the filter argument, which will match all documents in the collection. You could also use to delete an entire collection.

How We Support Our Community

CSNYC

It is still unusual for students to encounter computer science in their classrooms before they enter college. This absence directly contributes to the gender and racial disparity we see today across the technology industry. MongoDB partners with CSNYC to build a suite of materials for computer science teacher training, and a curriculum for them to use in the classroom. Our goal is to improve access to computing much earlier in students’ academic careers.

Diversity Scholarships

We are breaking down the barriers that prevent underrepresented groups in technology from attending tech conferences and offer Diversity Scholarships to MongoDB events. Recipients receive complimentary admission, a pre-conference workshop, a MongoDB certification voucher, and access to enterprise MongoDB University training courses.


Social Responsibility

We are proud to partner with Bright Funds, a philanthropic program that allows employees to donate to over 1 million charities right from their paycheck. 100% of contributions goes directly to the cause of the employee’s choosing.

Our Story

MongoDB was founded in 2007 by Dwight Merriman, Eliot Horowitz and Kevin Ryan – the team behind DoubleClick.

At the Internet advertising company DoubleClick (now owned by Google), the team developed and used many custom data stores to work around the shortcomings of existing databases. The business served 400,000 ads per second, but often struggled with both scalability and agility. Frustrated, the team was inspired to create a database that tackled the challenges it faced at DoubleClick.

MongoDB is the leading modern, general purpose database platform, designed to unleash the power of software and data for developers and the applications they build. Headquartered in New York, with offices across North America, Europe, and Asia-Pacific, we are close to where you do business. MongoDB has more than 18,400 customers in more than 100 countries. The MongoDB database platform has been downloaded over 110 million times and there have been more than 1 million MongoDB University registrations.

110+ milliondownloads

Ключевая терминология

Перед тем как приступить к установке MongoDB, давайте разберёмся с основными понятиями.

Как и MySQL, MongoDB может содержать множество баз данных, только вместо таблиц они содержат “коллекции”.

Коллекция — это что-то типа таблицы, только без колонок. Вместо этого каждая строка содержит наборы записей в виде ключ:значение.

Пример:

Каждая из этих записей, или строк, называется “документ”, но это не тот документ типа .txt или .html. Данная запись хранится в памяти в JSON формате.

Пример:

Предположим, в нашей коллекции содержится 500 документов. Как уже говорилось раньше, каждый из них может содержать разные поля. Единственное поле, которое должно быть у каждой записи, — это уникальный идентификатор (id), который добавляется автоматически.

Поначалу данная терминология может быть непривычной. Всё будет намного понятнее, когда вы увидите работу с СУБД на практике.

Соединение с mongoDB с помощью mongo-go-driver

После того как мы импортировали mongo-go-driver, у нас появилась возможность создать соединение с mongoDB использую функцию mongo.NewClient(). У нас есть возможность передать в эту функцию в качестве аргуменов context и стороку содержащую адрес подключения к mongodb. При желании мы также можем передать в качестве третьего аргумента объект options.ClientOptions для тонкой настройки параметров драйвера.В документации подробно описаны доступные параметры.

Давайте добавим следующий код в тело функции main:

После успешного соединения с mongoDB мы можем обратиться к коллекции trainers, которая находится в базе с именем test добавив следующий код в конец функции main:

Рекомендуется держать соединение с mongoDB открытым, чтобы не приходилось открывать и закрывать соединение для каждого запроса. Однако, если приложение больше не требует подключения, оно может быть закрыто с помощю функции client.Disconnect() следующим образом:

Закомментируйте неиспользуемые пакеты.

Запустите наш код (go run main.go) чтобы проверить подключение к серверу mongoDB.

Создание коллекции с параметрами

Вы также можете указать параметры для коллекции, используя синтаксис db.createCollection(name, options).

Вот пример:

db.createCollection("log", { capped : true, size : 4500500, max : 4000 } )

Доступные параметры для версии MongoDB 3.2:

Опция Тип Описание capped boolean При значении true создает ограниченную коллекцию. Ограниченная коллекция — это коллекция фиксированного размера, которая автоматически перезаписывает свои самые старые записи, когда достигает максимального размера. Если вы указываете true, вы также должны установить максимальный размер в поле size. autoIndexId boolean Укажите false, чтобы отключить автоматическое создание индекса в поле _id. Начиная с версии 3.2 MongoDB, это поле устарело и будет удалено в версии 3.4. size number Максимальный размер в байтах для ограниченной коллекции. Используется только с закрытыми коллекциями (игнорируется в других коллекциях). max number Максимально допустимое количество документов в закрытой коллекции

Обратите внимание, что поле size имеет приоритет над полем max. Если коллекция достигнет предела размера до того, как будет достигнут лимит документов, MongoDB все равно удалит документы. usePowerOf2Sizes boolean Доступно только в хранилище MMAPv1

Это поле устарело с версии 3.0. noPadding boolean Доступно только в хранилище MMAPv1. Отключает возможность выделения 2 размеров для коллекции. По умолчанию false. storageEngine document Доступно только в хранилище WiredTiger. Позволяет настраивать механизм хранения для каждой коллекции при создании коллекции. Синтаксис выглядит следующим образом: {: } validator document/td> Позволяет указать правила проверки или выражения для коллекции. Обратите внимание, что проверка применяется только при вставке и обновлении данных. Поэтому данные, которые уже существуют в базе данных, не проверяются (пока они не обновлены). validationLevel string Позволяет указать, насколько строго любые правила проверки применяются к существующим документам во время обновления. Возможные значения:off — Не выполняется проверка для вставок или обновлений.strict — Проверка происходит для вставок и обновлений. Это значение по умолчанию.moderate — Правила проверки применяются только к существующим действительным документам, но не к существующим недействительным документам. validationAction string Указывает, должна ли происходить ошибка или просто предупреждение при вставке недействительных документов. В случае ошибки недействительные документы все равно будут вставлены, но с предупреждением.error — Указывает, что возникает ошибка, когда записывается недопустимый документ и происходит сбой операции.warning — Указывает, что недействительные документы все еще могут быть записаны, и что предупреждение будет зарегистрировано. indexOptionDefaults document Позволяет указать конфигурацию по умолчанию для индексов при создании коллекции. Принимает документ storageEngine со следующим синтаксисом: {: }

Wrapping Up

We’ve seen how to structure a BSON Document in C# and then Create it inside a MongoDB database. The MongoDB C# Driver makes it easy to do with the , , , or methods. As I mentioned, using a is convenient when a schema isn’t defined. More frequently, however, the schema is defined in our code, not in the database itself. I’ll take a look at mapping BSON data to a C# Class in an upcoming post.

Now that we have Created data, we’ll want to Read it. I’ll show that step in the CRUD process in my next post.

Get started with an M0 cluster on MongoDB Atlas today. It’s free forever and you’ll be able to work alongside this blog series.

Other articles in this Quick Start C# and MongoDB series:

  • Quick Start: C# and MongoDB — Starting and Setup
  • Quick Start: C# and MongoDB — Read Operations
  • Quick Start: C# and MongoDB — Update Operations
  • Quick Start: C# and MongoDB — Delete Operations

Updating Data

To update a document we need two bits to pass into an command. We need a filter to determine which documents will be updated. Second, we need what we’re wanting to update.

Data to be Changed

Next, we want to make the change to the . We can do that with on the method.

Then we use the method to make the changes. Note here that MongoDB will update at most one document using the method. If no documents match the filter, no documents will be updated.

Array Changes

Not all changes are as simple as changing a single field. Let’s use a different filter, one that selects a document with a particular score type for quizzes:

Now if we want to make the change to the quiz score we can do that with too, but to identify which particular element should be changed is a little different. We can use the positional $ operator to access the quiz in the array. The $ operator on its own says «change the array element that we matched within the query» — the filter matches with scores.type equal to quiz and that element will get updated with the set.

And again we use the method to make the changes.

Почему MongoDB

Между не табличными СУБД многие пользователи делают выбор в пользу MongoDB. Во-первых, данную систему можно установить практически на всех операционных системах (Windows, OSX, Linux). Во-вторых, проект до сих пор активно развивается и с завидной частотой команда разработчиков публикует обновления. Также мне кажется, что MongoDB предоставляет хорошую документацию для начинающих.

MongoDB лучше подходит в тех случаях, когда таблицы можно представить в виде объектов. По-моему, подобные системы лучше использовать при разработке приложений для мобильный устройств. В этом плане, Mongo предоставляет отдельные библиотеки, как для iOS, так и для Adndroid-а.

Ещё один весомый аргумент в пользу MongoDB: работать с данной системой можно на многих языках программирования, таких как C/C++, Python, PHP, Rubym Perl, .NET и даже Node.js.

MongoDB — это реальное решение, если вы хотите отступить от SQL и попробовать что-то новенькое.


С этим читают