MongoDB. Урок 3. Создание схемы


Содержание материала:

Основы MongoDB

Курс «Основы MongoDB» состоит из 6 логически взаимосвязанных уроков, на которых учащиеся познакомятся с основными концепциями работы с MongoDB в среде NodeJS. 7 урок является кратким руководством применения MongoDB в .NET приложениях. На данном курсе учащиеся познакомятся с понятием «документо-ориентированная база данных», узнают основные различия между реляционными и нереляционными базами данных. Научатся работать с MongoDB сервером, администрировать его. Приобретут знания о том, как работать из различных языков программирования с Mongo посредством драйвера. Узнают об уникальной возможности для NoSQL решений – транзакциях в MongoDB. После прохождения курса вы будете понимать принципы работы с документо-ориентированной базой данных, будете уметь выполнять запросы и применять MongoDB при разработке приложений.

Подробное руководство по MongoDB, Mongoose

Введение

MongoDB состоит из БД, которые состоят из коллекций. Коллекции, в свою очередь, состоят из документов. Каждый документ состоит из полей.
www.mongodb.com

MongoDB клиенты

Конфиг mongodb для windows

В папке bin создайте файл и назовите его mongodb.config .

Указываем в этом файле путь, где будем хранить БД, например, для windows:

Запуск

  • mongod — это сервер баз данных MongoDB. Он обрабатывает запросы, управляет форматом данных и выполняет различные операции в фоновом режиме по управлению БД. Командная строка отобразит нам ряд служебной информации, например, что сервер запускается на localhost на порту 27017 .
  • mongo — клиентская консоль для взаимодействия с базами данных.
  • mongodump — утилита создания бэкапа БД.
  • mongorestore — позволяет записывать данные из дампа, созданного mongodump , в новую или существующую БД.

Стартуем mongod (сервер):

Подключаемся к запущенному серверу

Команда mongo позволяет подключиться к запущенному серверу (стартуем mongo оболочку/shell).

Работаем с БД

Выводим все БД в mongo:

Переходим (и одновременно создаем) к нужной БД

Команды db возвращает имя БД, внутри которой мы сейчас находимся:

Коллекции

Показать все коллекции в БД

Метод find()

Показать весь контент нужной коллекции:

Метод pretty выводит результат в удобном для чтения виде.

Метод count()

Метод count выводит количество документов в коллекции:

Метод remove()

Метод remove используется, чтобы удалить документ из коллекции (или всю коллекцию).

Метод insert()

Заносим данные в коллекцию band (создаем тем самым коллекцию band , если ее нет):

Добавим составы груп в коллекцию band :

Мы можем добавлять данные, не декларируя их предварительно: свойство members . Отсутствует схема: легко добавили массив объектов.

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

Модификация данных

Оператор $set

Оператор $set заставляет команду update модифицировать лишь те ключи, которые ему переданы (см. пример выше).

Оператор $unset

Оператор $unset удаляет указанный ключ

Оператор $inc

Оператор $inc увеличивает значение поля на указанную величину

Оператор $rename

Оператор $rename позволяет переименовать поля

Индексы

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

Индексы MongoDB – это специальные структуры данных, которые хранят небольшие части данных в форме, которая легко распознаётся. Они хранят значение определённого поля или набора полей, упорядоченных по значению поля, указанному в индексе.

Построим индекс по ключу bid :

ensureIndex устарел, начиная с версии 3.0, в данный момент является псевдонимом для db.collection.createIndex() .

Схемы и модели

Схемы определяют структуру документов внутри коллекции, а модели используются для создания копий данных, хранящихся в документах.

Основы MongoDB

  • 1 Внутри MongoDB может быть ноль или более баз данных.
  • 2 База данных может иметь ноль или более «коллекций» (коллекция практически тоже что и таблица).
  • 3 Коллекции состоят из нуля или более «документов». Опять же, документ можно рассматривать как «строку».
  • 4 Документ состоит из одного или более «полей», которые — как можно догадаться — подобны «колонкам».
  • 5 «Индексы» в MongoDB почти идентичны таковым в реляционных базах данных.
  • 6 Важно понимать, что когда мы запрашиваем у MongoDB какие-либо данные, то она возвращает курсор, с которыми мы можем делать все что угодно.

Отличия MongoDB от реляционных БД

Основное различие в том, что реляционные базы данных определяют «колонки» на уровне «таблицы», в то время как документ-ориентированные базы данных определяют «поля» (в реляционных «колонки») на уровне «документа» (в релационных «запись»).

В конечном счёте дело в том, что коллекция не содержит информации о структуре содержащихся в ней данных. Информацию о полях содержит каждый отдельный документ.

Селекторы запросов

Селектор запросов MongoDB (это JSON-объект) аналогичен предложению where SQL-запроса. Как таковой он используется для поиска, подсчёта, обновления и удаления документов из коллекций.

Селектор — это JSON-объект, в простейшем случае это может быть даже <> , что означает выборку всех документов (аналогичным образом работает null ). Если нам нужно выбрать всех единорогов (англ. «unicorns») женского рода, можно воспользоваться селектором .

<поле: значение>используется для поиска всех документов, у которых есть ‘поле’ и у него есть ‘значение’.

Оператор $lt, $lte, $gt, $gte, $ne

Специальные операторы $lt , $lte , $gt , $gte и $ne используются для выражения операций «меньше», «меньше или равно», «больше», «больше или равно», и «не равно».

Пример использовани селекторов с командой find (но также селекторы могут быть использованы с remove , count , update ):

Например, чтобы получить всех самцов единорога, весящих более 700 фунтов, мы можем написать:

Оператор $exists

Оператор $exists используется для проверки наличия или отсутствия поля, например:

Оператор $or

Оператор $or используется как ИЛИ

Поле loves это массив. MongoDB поддерживает массивы как объекты первого класса. Самое интересное это та простота, с которой делается выборка по значению массива: вернёт нам все документы, у которых watermelon является одним из значений поля loves .

Оператор $where

Оператор $where (в след. разделах)

Самый гибкий оператор — $where , позволяющий нам передавать JavaScript для его выполнения на сервере.

Оператор ObjectId

ObjectId , сгенерированный MongoDB для поля _id , подставляется в селектор следующим образом:

update

В простейшей форме, update принимает 2 аргумента: селектор для выборки и то, чем обновить соответствующее поле. Второй параметр используется для полной замены оригинала:

По умолчанию, update обновляет лишь первый найденный документ

Модификатор $set

Модификатор $set обновляет конкретные поля, а не весь документ.

Если вам нужно всего лишь изменить пару полей, лучше всего использовать модификатор $set :

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

модификатор $inc

Модификатор $inc — увеличить или уменьшить значение поля. Модификатор воздействуют непосредственно на поля, а не на весь документ.

Модификатор $push

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

Разрешаем вставку при обновлении (3-й параметр)

Обновление/вставка: обновляет документ, если он найден, или создаёт новый — если не найден. Чтобы разрешить вставку при обновлении (если элемент не будет найден), установите третий параметр в true .

Вставки и обновления не будет, так как 3-й параметр опущен, а документа с отсутствует в коллекции.

Поскольку документы с полем page , равным unicorns , не существуют, то будет создан новый документ. Если выполнить это вторично, существующий документ будет обновлён, и поле hits увеличится до 2.

Одновременно создастся коллекция hits , если она отсутствует.

Множественные обновления (4-й параметр)

Чтобы обновить множество документов нужно установить четвертый параметр в true :

Этим мы обновили все поля добавив везде поле vaccinated со значением true

find (курсор)

Курсор базы данных — это объект БД, который позволяет приложениям работать с записями «по-одной», а не с множеством сразу. То есть курсор (как мы помним это объект), который позволяет передвигаться по выборке (назад на одно, вперед на одну, в конец/начало) при помощи своих методов.

Как уже упоминалось, результатом find является курсор. Второй необязательный параметр у find это список полей, которые мы хотим получить.

_id по умолчанию возвращается всегда. Но мы можем исключить _id следующим образом: .

Получаем все поля, кроме поля name :

Как уже упоминалось, результатом find является курсор. Поэтому мы можем присоединить к нему ряд методов:

Сортировка (метод sort)

Синтаксис метода sort: мы указываем поля, по которым надо сортировать, используя 1 для сортировки по возрастанию и -1 для сортировки по убыванию. Например:

Но для сортировки большого объема данных в MongoDB необходимо использовать индексы.

Метод limit()

Метод skip()

Метод skip() позволяет пропустить определенное количество записей.

Обратите внимание как мы соединяем методы в цепочки.


Моделирование данных

MongoDB не поддерживает JOIN . По существу мы должны делать второй запрос, чтобы найти связанные данные.

p.s: Для создания нового ObjectID используется следующий код: NewObject >

Моделируем ‘один-ко-многим’ или ‘многие-ко-многим’

Когда требуется смоделировать отношения «один-ко-многим» или «многие-ко-многим» можно использовать массивы ( в MongoDB массивы это объекты первого класса).

При этом следующий find сработает:

Массивы значений намного удобнее в использовании, нежели таблицы связи «многие-ко-многим»

Вложенные документы

MongoDB поддерживает вложенные документы:

Вложенные документы можно запрашивать с помощью точечной нотации:

Денормализация

Традиционный путь ассоциировать пользователя с его постом — это колонка userid в таблице posts . С такой моделью нельзя отобразить список постов без дополнительного извлечения данных (JOIN) из таблицы пользователей. Возможное решение — хранить имя пользователя ( name ) вместе с userid для каждого поста.

Команды (выжимка)

Подключение MongoDB в Node.js

Mongoose

ODM – Object-Document Mapper (объектно-документное отображение). У MongoDB нет жесткой структуры, а вот Mongoose позволяет нам ввести понятие схемы.

Установка и подключение (работаем через mongoose)

Установка и подключение (работаем через нативный клиент — MongoClient)

Схема

Схема в Mongoose определяет метаданные модели — ее свойства, типы данных и ряд другой информации. mongoosejs.com/docs/guide.html

Типы схем

Модель

Модели (http://mongoosejs.com/docs/models.html) — это конструкторы, составленные из определения нашей схемы. Экземпляры модели представляют собой документы, которые могут быть сохранены и извлечены из нашей БД.

Первый параметр в методе mongoose.model указывает на название модели, а второй параметр — схема.

Сохраняем объект в БД

Кроме метода save() также можно использовать метод Person.create() (см. код ниже). Первый параметр метода — сохраняемый объект.

Поиск (find, findById, findOne)

Методы Для получения данных:

find — возвращает все объекты, которые соответствуют условию фильтрации. find() в качестве первого параметра принимает условие фильтрации; второй параметр метода find() — функция обратного вызова, в которую передаются полученные из БД документы. Если в качестве условия фильтрации передаются пустые фигурные скобки ( <> ), то возвращаются все объекты.

findById — возвращает один объект по значению поля _id . Метод возвращает документ с определенным идентификатором.

findOne — возвращает один объект, который соответствует критерию фильтрации. В отличие от метода find , метод findOne() возвращает один объект.

Редактирование (update, findByIdAndUpdate)

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

Нередко для обновления используется фильтрация по _id . И на этот случай мы можем использовать метод findByIdAndUpdate() .

Первый параметр метода findByIdAndUpdate() — значения для поля _id у обновляемого документа, а второй — набор новых значений для полей объекта. В функцию обратного вызова передается обновленный документ.

Удаление (remove, findOneAndRemove)

Для удаления применяется метод remove() . В метод remove() передается критерий фильтрации документов на удаление. Объект, который передается в функцию обратного вызова, содержит информацию об операции удаления.

Метод findOneAndRemove() позволяет удалить один документ. В функцию обратного вызова метод findOneAndRemove() передается удаленный документ.

И частная разновидность этого метода — удаление по полю _id в виде метода findByIdAndRemove() .

Валидация в Mongoose

Mongoose имеет ряд встроенных правил валидации, которые следует указывать в схеме:

  • required — обязательно наличие значения для свойства.
  • min и max — задают минимальное и максимальное значения для числовых данных.
  • minlength и maxlength — задают минимальную и максимальную длину для строк.
  • enum — строка должна представлять одно из значений в указанном массиве строк.
  • match — строка должна соответствовать регулярному выражению.

Если мы попытаемся добавить некорректные данные в БД, то запрос на добавление вернет ошибку.

Promise и Mongoose

С MongoDB можно использовать Promise .

С помощью метода then мы можем получить данные, которые возвратил нам сервер и выполнить обработку результата.

mlab.com

mlab.com — это облачный сервис по предоставлению БД mongoDB.

  • Создаем БД
  • Добавляем пользователя
  • И подключаемся в своем приложении:

CRUD — (create, read, update, delete — «создание, чтение,обновление, удаление») — 4 основные функции, используемые при работе базами данных.

Основы MongoDB

Познакомьтесь с самой популярной NoSQL базой данных

Для доступа к курсу необходимо аутентифицироваться.

Описание

MongoDB — одна из самых популярных NoSQL баз данных. Данные в MongoDB хранятся в документах, которые очень похожи на JSON-объекты. Гибкая структура и отсутствие строгой схемы данных, позволяет намного ускорить процесс создания приложения и его дальнейшего развития.

Содержание

Курс состоит из 7 секций и 44 уроков общей продолжительностью 2.5 ч.

  • Вступление 7 шагов expand_more
    • play_circle_outline Добро пожаловать 3:43
    • play_circle_outline Установка MongoDB 4:09
    • play_circle_outline Запуск MongoDB 1:32
    • play_circle_outline Оболочка Mongo 2:35
    • play_circle_outline Compass 3:25
    • play_circle_outline Robo3T 2:26
    • play_circle_outline Создание базы данных 5:00
  • Знакомство c MongoDB 7 шагов expand_more
    • play_circle_outline Что такое MongoDB? 2:35
    • play_circle_outline Преимущества MongoDB 6:40
    • play_circle_outline Составные части MongoDB 0:42
    • play_circle_outline BSON 3:31
    • play_circle_outline ObjectID 1:14
    • play_circle_outline Документ 1:41
    • play_circle_outline Моделирование данных 6:55
  • Чтение документов 10 шагов expand_more
    • play_circle_outline Вступление 1:17
    • play_circle_outline Простые запросы 2:34
    • play_circle_outline Поиск в объектах 3:42
    • play_circle_outline Поиск в массивах 2:46
    • play_circle_outline Поиск в массивах с помощью операторов $in и $all 2:26
    • play_circle_outline Поиск в массивах по индексу 1:22
    • play_circle_outline Поиск одного документа 1:02
    • play_circle_outline Проекция 2:28
    • play_circle_outline Сортировка, пропуск и ограничение 3:53
    • play_circle_outline Курсор 7:32
  • Создание документов 4 шага expand_more
    • play_circle_outline Создание одного документа 3:18
    • play_circle_outline ObjectID при создании документов 2:58
    • play_circle_outline Создание нескольких документов 1:20
    • play_circle_outline Указание типа данных при создании документов 2:00
  • Изменение документов 9 шагов expand_more
    • subject Вступление Статья
    • play_circle_outline Изменение документов в Robo3T 0:37
    • play_circle_outline Изменение документа c помощью $set 5:21
    • play_circle_outline Изменение числового свойства с помощью $inc 2:05
    • play_circle_outline Добавление элемента в массив с помощью $push 1:19
    • play_circle_outline Удаление элемента из массива с помощью $pull 0:32
    • play_circle_outline Добавление элемента в массив с помощью $addToSet 1:05
    • play_circle_outline Добавление нескольких элементов в массив с помощью $each 3:38
    • play_circle_outline Удаление свойства с помощью $unset 0:53
  • Удаление документов 2 шага expand_more
    • play_circle_outline Удаление нескольких документов 1:25
    • play_circle_outline Удаление одного документа 0:37
  • Операторы 5 шагов expand_more
    • play_circle_outline Вступление 2:05
    • play_circle_outline Операторы сравнения 9:30
    • play_circle_outline Операторы элементов 7:06
    • play_circle_outline Логические операторы 5:59
    • play_circle_outline Операторы массивов 12:06
Топ-пост этого месяца:  Как использовать при работе с Vue Event Bus передача свойств между компонентами

Вопросы и комментарии

Есть вопросы или комментарии? Задавайте не стесняйтесь!

MongoDB для новичков: введение и установка (часть 1/3)

Mongo представляет собой open source систему баз данных без схем, которая сильно отличается от более популярной MySQL. Самое главное различие заключается в том, что MySQL состоит из sql-запросов, а MongoDB сосредоточена на BSON (Binary JSON).

Это значит, что к большей части функционала можно осуществить доступ напрямую посредством javascript-значений.

Но Mongo представлена с собственным интерфейсом для запуска команд напрямую в вашей базе данных. В данном руководстве мы хотим сделать следующее:

* Раскрыть этапы настройки вашей системы (Windows и Mac) и запуска Mongo,
* Работу команд в Mongo (в скором будущем)
* Настройку MongoDB при помощи PHP (в скором будущем)

Веб-разработчикам действительно понравится Mongo, если они знакомы с JSON . Этот язык на базе javascript сосредоточен на объектах, которые содержат пары ключ-значение.

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

Почему мы рекомендуем MongoDB?

Кроме Mongo есть и несколько других баз данных без схем , которые вы можете опробовать. Лично мы слышали только положительные отзывы об этом проекте и он, к тому же, поддерживается многими ОС (Windows, OSX, Linux), а команда разработчиков продолжает радовать нас новыми релизами на регулярной основе.

На сайте MongoDB мы наткнулись на статью, в которой MongoDB сравнивается с CouchDB , которую на данный момент приобрела Apache. Оба эти проекта используют JSON для хранения данных, и обе способны поддерживать крупные приложения. Это может быть очередной случай, где на выбор влияет лишь личное мнение, но нам кажется, что Mongo предлагает гораздо больше расширенной документации для новичков.

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

Существует даже open source библиотека MongoDB для iPhone-разработчиков , и множество других ресурсов для Android-программистов, использующих java.

Можно сказать, надежность MongoDB и доступность коллективной базы кода – это самые веские причины к тому, чтобы начать изучать эту систему. Здесь имеются драйвера практически для любого языка, включая /C++, Python, PHP, Ruby, Perl, .NET и даже Node.js.

Это мощное решение для веб-разработчиков, которые устали от ограничений SQL, и хотят попробовать нечто новое.

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

MongoDB может содержать различные базы данных под разными названиями внутри одного пакета установки, как и MySQL. Но внутри баз данных коллекции , а не таблицы.

Коллекцию можно расценивать как таблицу, за исключением того, что здесь нет привязанных колонок. Каждая запись (строка) может использовать различные динамические схемы в парах ключ-значение.

Пример:
Внутри коллекции Users может быть одна запись с First name и Last name. Другая запись может содержать First, Last и Middle name, а также email-адрес и дату рождения. Это и есть гибкая система MongoDB, которая упрощает работу с этими базами данных.

Каждая из этих записей или строк внутри коллекции называется документом ( document ). Они не являются физическими документами вроде txt или html, они больше представляют собой объекты на базе документов. В общем, они являются блоками данных JSON, размещенных в файлах управляемых памятью, которые действуют как отдельные записи в ваших коллекциях.

Пример:
В нашей коллекции Users у нас может быть всего 500 объектов document для всех 500 пользователей. Как уже было отмечено выше, документы не должны соответствовать друг другу с точки зрения одинаковых полей. Единственное требование – это уникальный ID-номер, который MongoDB добавляет в каждый объект document автоматически.

Мы понимаем, что данная терминология поначалу может быть непонятной. Гораздо больше станет понятно, когда вы увидите весь этот процесс в действии. Если у вас есть пара минут, проштудируйте онлайн-документацию Mongo , чтобы иметь более четкое представление.

И даже если вы поняли суть не совсем полностью – это не страшно! Многие люди ежедневно используют MySQL с таким же слабым понимаем того, как работает база данных.

Давайте приступим к работе, и настроим нашу базу MongoDB.

Процесс настройки MongoDB

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

* Настройка MongoDB под Mac OS X и
* Настройка MongoDB под Windows

Мы используем последние версии OSX Mountain Lion и Windows 7. После установки Mongo, нам нужно будет настроить локальный сервер с WAMP для Windows или MAMP для OS X.

Установка Mongo на Mac OS X

Настройка MongoDB в Mac происходит гораздо проще, чем в Windows. Через командную (или терминал) мы запускаем несколько команд, чтобы получить последние версии MacPorts. Онлайн-документация предлагает нам небольшое руководство по Mac OS X , где нам дается такая же информация.

Для начала давайте проверим и обновим последнюю версию MacPorts . В командную строку нужно ввести следующее:

С другой стороны, вы можете добавить пометку debug, чтобы результат выводился следующим образом:

Процесс может занять несколько минут, так как производится закачка и установка.

После того, как это обновление будет завершено, нам нужно запустить всего одну строку в командной строке. Это принесет нам самые свежих файлы библиотеки MongoDB, и поместит вмести с другими системными зависимостями.

Этот процесс может занять 10-15 минут, даже если у вас будет быстрый интернет. Установка потребует немного времени, но должна произойти быстрее, но обязательно дождитесь запуска терминала.

Затем у вас должна появиться возможность запустить сервер, используя команду:

Все должно завершиться фразой «waiting for connections on port 27017» (ожидаю подключения к порту 27017).

Это означает, наша база данных запущена и работает корректно. Вы можете протестировать ее, набрав в браузере http://localhost:28017/. MongoDB предоставляет небольшой веб-интерфейс, который позволяет вам получить информацию о ваших базах данных и установке.

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


Сначала вам нужно скачать, разархивировать и переместить этот документ org.mongodb.mongod.rar [476 b] (cкачиваний: 55) в /Library/LaunchDaemons/, т.е. у вас должно получиться так: /Library/LaunchDaemons/org.mongo.mongod.plist.

Затем в терминале создать небольшой Log-файл, и директорию для новых системных данных:

Наконец, запустить следующие команды для настройки запускающего модуля. Вы можете выставить перезагрузку компьютера после процесса, чтобы проверить, будет ли Mongo работать правильно после перезагрузки.

Устанавливаем Mongo на Windows

Мы столкнулись с серьезными трудностями при попытке запустить MongoDB без аккаунта администратора. Это не так уж и сложно, если вам доступна опция «Открыть с правами администратора».

Но если у вас есть возможность, просто введите эту команду и перезагрузите компьютер. После перезагрузки вы заметите, что можете выбрать аккаунт Администратора для авторизации.

Если вы столкнетесь с проблемами, то у MongoDB есть отличное онлайн-руководство по установке , разработанное специально для пользователей Windows. Чтобы получить свою копию, откройте страницу закачек , где вы увидите версию для Windows. На момент написания этой статьи, последний стабильный релиз был MongoDB 2.2.0: отсюда вы можете скачать версию win32 , а здесь — win64 .

Нам нужно поместить все эти файлы прямо в каталог C:\mongodb\. То есть, как только завершится закачка, распакуйте архив, и открывайте папки до тех пор, пока не дойдете до /bin/ с несколькими файлами. Выделите все эти файлы, вырежьте их и вставьте в новый каталог C:\mongodb\.

Теперь, в этой папке, кроме \bin\, создайте новую папку «log», в которой мы будем хранить все log-файлы нашей системы MongoDB. Нам также нужно создать две внешние папки для хранения данных: C:\data\ и C:\data\db\.

И именно здесь использование не администраторского аккаунта может вызвать проблему. Откройте командную строку и запустите cd C:\mongodb\bin.

Теперь нам нужно запустить mongod.exe, но после запуска вы заметите, что операция будет заморожена в момент прослушивания подключений. На самом деле, она не заморожена, мы запустили Mongo напрямую через терминал.

Это будет вам надоедать, поэтому давайте запустим команду, которая настроит автоматический запуск Mongo в качестве сервиса Windows.

Первая команда создаст log-файл и конфигурацию для сервиса. Это не обязательно, но желательно уметь делать, будучи администратором базы данных.

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

Если у вас не возникло никаких ошибок, то все сделано правильно!

Проверьте, активен ли сервис. Сделать это можно, открыв меню «Пуск» (Windows + R), и вписав services.msc.

Эта команда откроет перед вами перечень активных сервисов, и если вы прокрутите его вниз, то увидите Mongo DB в статусе «активный» и типом запуска «автоматический».

В Mac вы можете осуществить доступ к терминалу Mongo прямо посредством командной строки. Измените директории на C:\mongodb\bin\ и впишите mongo, а затем нажмите Enter.

Сейчас у вас должен появиться доступ прямо к серверу MongoDB. Теперь вы можете запускать команды Mongo для создания баз данных, коллекций, размещения новых данных или редактирования старых записей данных.

Запустите следующую строку, чтобы отобразить все текущие базы данных на сервере:

На сегодня все! Надеемся, что теперь у вас есть хоть какое-то понимание системы MongoDB, и вы сможете запустить ее на собственном компьютере! В следующей статье мы раскроем для вас базовые команды для MongoDB. Следите за новостями!

Вам понравился материал? Поблагодарить легко!
Будем весьма признательны, если поделитесь этой статьей в социальных сетях:

Введение в Mongoose для MongoDB и Node.js

Russian (Pусский) translation by AlexBioJS (you can also view the original English article)

Mongoose — это библиотека JavaScript, часто используемая в приложении Node.js с базой данных MongoDB. В данной статье я собираюсь познакомить вас с Mongoose и MongoDB и, что более важно, показать, где их уместно использовать в вашем приложении.

Что такое MongoDB?

Для начала рассмотрим MongoDB. MongoDB — это база данных, которая хранит ваши данные в виде документов. Как правило, эти документы имеют JSON (* JavaScript Object Notation — текстовый формат обмена данными, основанный на JavaScript. Здесь и далее примеч. пер.) — подобную структуру:

Затем документ помещается внутрь коллекции. Например, в вышеуказанном примере документа определяется объект user . Далее этот объект user стал бы, скорее всего, частью коллекции под названием users .

Одна из основных особенностей MongoDB — гибкость структуры её данных. Несмотря на то, что в первом примере объект user имел свойства firstName и lastName , эти свойства могут отсутствовать в других документах user коллекции users . Именно это отличает MongoDB от баз данных SQL (* structured query language — язык структурированных запросов), например, MySQL или Microsoft SQL Server, в которых для каждого объекта, хранящегося в базе данных, необходима фиксированная схема.

За счет способности создавать динамические объекты, которые сохраняются в виде документов в базе данных, в игру вступает Mongoose.

Что такое Mongoose?

Mongoose — это ODM (* Object Document Mapper — объектно-документный отобразитель). Это означает, что Mongoose позволяет вам определять объекты со строго-типизированной схемой, соответствующей документу MongoDB.

Mongoose предоставляет огромный набор функциональных возможностей для создания и работы со схемами. На данный момент Mongoose содержит восемь SchemaTypes (* типы данных схемы), которые может иметь свойство, сохраняемое в MongoDB. Эти типы следующие:

  1. String
  2. Number
  3. Date
  4. Buffer
  5. Boolean
  6. Mixed
  7. ObjectId (* уникальный идентификатор объекта, первичный ключ, _id)
  8. Array

Для каждого типа данных можно:

  • задать значение по умолчанию
  • задать пользовательскую функцию проверки данных
  • указать, что поле необходимо заполнить
  • задать get-функцию (геттер), которая позволяет вам проводить манипуляции с данными до их возвращения в виде объекта
  • задать set-функцию (* сеттер), которая позволяет вам проводить манипуляции с данными до их сохранения в базу данных
  • определить индексы для более быстрого получения данных

Кроме этих общих возможностей для некоторых типов данных также можно настроить особенности сохранения и получения данных из базы данных. Например, для типа данных String можно указать следующие дополнительные опции:

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

Для свойств типа Number и Date можно задать минимально и максимально допустимое значение.

Большинство из восьми допустимых типов данных должны быть вам хорошо знакомы. Однако, некоторые ( Buffer , Mixed , ObjectId и Array ) могут вызвать затруднения.

Тип данных Buffer позволяет вам сохранять двоичные данные. Типичным примером двоичных данных может послужить изображение или закодированный файл, например, документ в PDF-формате (* формат переносимого документа).

Тип данных Mixed используется для превращения свойства в «неразборчивое» поле (поле, в котором допустимы данные любого типа). Подобно тому, как многие разработчики используют MongoDB для различных целей, в этом поле можно хранить данные различного типа, поскольку отсутствует определенная структура. С осторожностью используйте этот тип данных, поскольку он ограничивает возможности, предоставляемые Mongoose, например, проверку данных и отслеживание изменений сущности для автоматического обновления свойства при сохранении.

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

Тип данных Array позволяет вам сохранять JavaScript-подобные массивы. Благодаря этому типу данных вы можете выполнять над данными типичные JavaScript операции над массивами, например, push, pop, shift, slice и т.д.

Краткое повторение

Перед тем, как двинуться далее и писать код, мне хотелось бы подвести итог того, что мы только что выучили. MongoDB — это база данных, которая позволяет вам сохранять документы с динамической структурой. Эти документы сохраняются внутри коллекции.

Mongoose — это библиотека JavaScript, позволяющая вам определять схемы со строго-типизированными данными. Сразу после определения схемы Mongoose дает вам возможность создать Model (модель), основанную на определенной схеме. Затем модель синхронизируется с документом MongoDB с помощью определения схемы модели.

Сразу после определения схем и моделей вы можете пользоваться различными функциями Mongoose для проверки, сохранения, удаления и запроса ваших данных, используя обычные функции MongoDB. Мы еще рассмотрим это более подробно на конкретных примерах.

Установка MongoDB

До того, как начать создавать схемы и модели Mongoose, нам необходимо установить и настроить MongoDB. Я бы порекомендовал вам зайти на страницу загрузки MongoDB. Имеется несколько различных вариантов установки. Я выбрал Community Server. Данный вариант позволяет вам установить версию, предназначенную именно для вашей операционной системы. Также MongoDB предлагает вариант Enterprise Server и вариант облачной установки. Поскольку целые книги можно было бы написать об установке, настройке и мониторинге MongoDB, я остановился на варианте Community Server.

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

Я подожду вас, пока вы настроите MongoDB. Как только вы справились с вышесказанным, мы можем перейти к инсталляции Mongoose для соединения с вашей только что установленной базой данных MongoDB.

Установка Mongoose

Mongoose — это библиотека JavaScript. Я собираюсь использовать её в приложении Node.js. Если у вас уже установлен Node.js, то вы можете перейти к следующему разделу. Если же не установлен, я рекомендую вам начать с посещения страницы загрузки Node.js и выбора установщика для вашей операционной системы.

Топ-пост этого месяца:  Новая программа Product Experts на форумах Google что это, как работает

Как только Node.js установлен и настроен, я собираюсь создать новое приложение и затем установить npm (* диспетчер пакетов Node) модуль Mongoose.

После перехода в консоли в папку, куда бы вы хотели установить ваше приложение, вы можете выполнить следующие команды:

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

После выполнения всех необходимых предварительных условий, давайте подключимся к базе данных MongoDB. Я разместил следующий код в файле index.js, поскольку я выбрал его как стартовую точку моего приложения:

В первой строке кода мы подключаем библиотеку mongoose . Далее я открываю соединение с базой данных, которую я назвал mongoose_basics , используя функцию connect .

Функция connect принимает еще два других необязательных параметра. Второй параметр — объект опций, где вы можете указать, при необходимости, например, username (имя пользователя) и password (пароль). Третий параметр, который также может быть и вторым, если у вас не определены опции, — это функция обратного вызова, которая будет вызвана после попытки соединения с базой данных. Функцию обратного вызова можно использовать двумя способами:

Чтобы избежать потенциальной необходимости введения в JavaScript Promises, я буду использовать первый способ. Ниже приводится обновленный index.js::

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

Теперь Mongoose установлена и подключена к базе данных под названием mongoose_basics . Мое соединение с MongoDB не использует ни username, ни password, ни пользовательского порта. Если вам необходимо указать эти опции или любую другую при подключении, я рекомендую вам просмотреть документацию Mongoose по подключению. В документации дается объяснение как многих доступных опций, так и процесса создания нескольких соединений, объединения соединений, реплик и т.д.

После удачного соединения давайте перейдем к определению схемы.

Определение Mongoose Schema (* схемы)

В начале статьи я показал вам объект user , который имел два свойства: firstName и lastName . В следующем примере я переделал этот документ в схему:

Это очень простая схема, которая содержит всего лишь два свойства без атрибутов, связанных с ней. Давайте распространим наш пример, сделав свойства first и last name дочерними объектами свойства name . Свойство name будет содержать свойства first и last name. Также я добавлю свойство created типа Date .

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

В следующем примере я собираюсь создать две новые схемы ( author и book ) и показать вам, как создать связь с другой схемой. Схема book будет содержать ссылку на схему author .

Выше приводится схема author , которая распространяет схему user , что я создал в предыдущем примере. Чтобы связать Author и Book, в схеме author первым свойством указываем _id типа ObjectId . _id — это стандартный синтаксис для обозначения первичного ключа в Mongoose и MongoDB. Далее, как и в схеме user , я определил свойство name , содержащее first и last name автора.

Распространяя схему user , схема author содержит несколько дополнительных свойств типа String . Также я добавил свойство типа Buffer , в котором можно было бы расположить изображение профиля автора. Последнее свойство содержит дату создания автора; однако, вы можете обратить внимание, что оно создано немного по-иному, так как в нем указано значение по умолчанию «сейчас». При сохранении автора в базу данных, данному свойству будет присвоено значение текущей даты/времени.

Чтобы завершить примеры схем, давайте создадим схему book , которая содержит ссылку на автора, за счет использования свойства типа ObjectId .

Схема book содержит несколько свойств типа String . Как было упомянуто ранее, эта схема содержит ссылку на схему author . Схема book также содержит свойство ratings типа Array , чтобы продемонстрировать вам возможности определения схем. Каждый элемент этого массива содержит свойства summary , detail , numberOfStars и created date.

Mongoose дает вам возможность создавать схемы со ссылками на другие схемы или, как в примере выше со свойством ratings , позволяет создавать Array дочерних свойств, который может содержаться в привязанной схеме (author в нашем примере) или же в текущей схеме, как в примере выше (схема book со свойством ratings типа Array ).

Создание и сохранение Mongoose Models (* моделей)

Поскольку на примере схем author и book мы увидели гибкость схемы Mongoose, я собираюсь продолжить использовать их и создать на их основе модели Author и Book .

После сохранения модели в MongoDB создается Document (* документ) с теми же свойствами, что определены в схеме, на основе которой была создана модель.

Чтобы продемонстрировать создание и сохранение объекта, в следующем примере я собираюсь создать несколько объектов: одну модель Author и несколько моделей Book . Сразу после создания эти объекты будут сохранены в MongoDB при помощи метода модели save .

В примере выше я самым бессовестным образом разместил ссылки на две мои новые книги. В начале примера мы создаем и сохраняем jamieObject , созданный при помощи модели Author . В случае ошибки внутри функции save объекта jamieObject приложение выбросит исключение. В случае же отсутствия ошибки внутри функции save будут созданы и сохранены два объекта book. Подобно объекту jamieObject , в этих объектах в случае возникновения ошибки при сохранении выбрасывается исключение. В ином случае в консоль выводится сообщение об успешном сохранении.

Для создания ссылки на Author, оба объекта book ссылаются на первичный ключ _id схемы author в свойстве author схемы book .

Проверка данных перед сохранением

Общепринято наполнение данных для создания модели в форме на веб-странице. По этой причине, хорошо бы проверить эти данные перед сохранением модели в MongoDB.

В следующем примере я обновил предыдущую схему author, добавив проверку данных следующих свойств: firstName , twitter , facebook и linkedin .

Для свойства firstName был задан атрибут required . Теперь при вызове функции save , Mongoose вернет ошибку с сообщением о необходимости указания значения свойства firstName . Я решил сделать свойство lastName без необходимости указания его значения на случай, если авторами в моей базе данных были бы Cher или Madonna (* отсутствует фамилия).

Для свойств twitter , facebook и linkedin используются подобные пользовательские валидаторы. Они проверяются на соответствие начала их значений соответствующему доменному имени социальных сетей. Поскольку это необязательные для заполнения поля, валидатор применяется только в случае поступления данных для этого свойства.

Поиск и обновление данных

Введение в Mongoose не было бы завершенным без примера поиска записи и обновления одного или более свойств этого объекта.

Mongoose предоставляет несколько различных функций для поиска данных определенной модели. Эти функции следующие: find , findOne и findById .

Функции find и findOne получают в качестве аргумента объект, позволяющий осуществлять сложные запросы. Функция же findById получает только одно значение функции обратного вызова (скоро будет пример). В следующем примере я продемонстрирую вам, как можно сделать выборку книг, содержащих в своем названии строку ‘mvc’.

Внутри функции find я осуществляю поиск нечувствительной к регистру строки ‘mvc’ по свойству title . Это осуществляется с помощью того же синтаксиса, что используется для поиска строки в JavaScript.

Функцию find таккже можно «прицепить» к другим методам запроса, например, where , and , or , limit , sort , any и т.д.

Давайте распространим наш предыдущий пример, ограничив количество результатов до пяти первых книг и отсортировав их по дате создания по убыванию. Результатом будут первые пять наиболее новых книг, содержащих в названии строку ‘mvc’.

После применения функции find порядок последующих функций не имеет значения, поскольку из всех сцепленных функций формируется единый запрос и функции не выполняются до вызова функции exec .

Как я упоминал ранее, функция findById выполняется немного по-другому. Она выполняется сразу же и принимает в качестве одного из аргументов функцию обратного вызова, и не позволяет сцепливание функций. В следующем примере я запрашиваю необходимого автора по его _id .

У вас значение _id может быть немного другим. Я скопировал значение _id из предыдущего console.log , когда осуществляли поиск книг, содержащих в названии строку ‘mvc’.

Сразу после возвращения объекта вы можете изменить любое из его свойств и обновить его. Как только вы внесли необходимые изменения, вы вызываете метод save также, как вы делали и при создании объекта. В следующем примере я распространю пример с функцией findbyId и обновлю свойство linkedin автора.

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

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

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

Полный код примера

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

Для начала я создал два дополнительных файла: author.js и book.js . Данные файлы содержат соответствующие оределения схем и создание моделей. Последняя строка кода делает модель доступной для использования в файле index.js .

Давайте начнем с файла author.js:

Далее переходим к файлу book.js :

И, наконец, обновленнй файл index.js :

В вышеуказанном примере все действия Mongoose содержатся внутри функции connect . Файлы author и book подключаются при помощи функции require после подключения mongoose .

Если MongoDB запущена, вы теперь можете запустить полное приложение Node.js при помощи следующей команды:

После сохранения некоторых данных в базу я обновил файл index.js , добавив функции поиска, следующим образом:

Опять-таки, вы можете запустить приложение при помощи следующей команды: node index.js .

Резюме

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

Надеюсь, теперь вы чувствуете себя уверенным пользователем Mongoose. Если вы хотите узнать больше о Mongoose, я бы рекомендовал вам изучить Mongoose Guides, в котором объясняются более продвинутые темы, например, population, middleware, promises и т.д.


Попытка создать схему mongodb для приложения, но интересно, я просто делаю 3 коллекции?

В принципе, я имею прямо сейчас базу данных postgreSQL, которая имеет следующее:

Family которая содержит family_id, family_name, and f_url

Member который содержит member_id, family_id, associations где ассоциации являются разделенным запятой полем, где пользователь добавляет до 10 ассоциаций для разных семейств.

Наконец, участники могут добавлять сообщения в свою семью, поэтому Data которые содержат id, title, message, image_link .

Я пытаюсь изучить mongodb, и мне интересно, как h ** k продолжить эту простую вещь. Я просто делаю 3 коллекции с одинаковой настройкой или есть другой способ сделать это?

Я создал 3 сборника с одинаковой настройкой, но тогда это правильно?

Спасибо вам всем

Идеальным будет дизайн таким образом, чтобы вы могли справиться со всем, что было только в одном объекте json. Это гарантирует атомарность. Никаких транзакций не требуется.

В Mongo DB база данных разработана с учетом следующих факторов.

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

Единственным важнейшим фактором при разработке схемы приложения в Mongo DB является сопоставление шаблонов доступа к данным вашего приложения.

Дизайн базы данных в Mongo DB больше похож на коллекцию объектов в мире разработки программного обеспечения.

Другой совет дизайна, если вы делаете это как отношение db, вы делаете что-то неправильно.

Введение в MongoDB

В этой статье я хочу вам рассказать, почему вообще Mongo и стоит ли вам смотреть в ее сторону.

Для начала пару слов о моем опыте с ней. Попробовал я ее первый раз года четыре назад, когда она стала модная и все хотели ее попробовать, потому что NoSQL это то, что нужно любому стартапу. (на самом делел нет, читайте дальше) Но тогда дело далеко не зашло, побаловался, даже в каком-то из MVP ее применили, но в продакшн дело не пошло. С тех пор я ее, можно сказать, позабыл. Однако полтора года назад я устроился в компанию, где MongoDB активно используется. Там была развестистая микросервисная архитектура и один из микросервисов, весьма не микро, использовал как раз эту базу данных. Тут я вкусил ее по полной. Испытал и чувство наслаждения от того, как все легко меняется, и взрывы гнева от того, что неожиданности в ее поведении порой были слишком неожиданными. Теперь же я работаю в другом месте и Монга у нас используется с полной осознанностью с моей стороны и прикасаюсь я к ней ежедневно, можно даже сказать, ежечасно.

Итак, давайте разберем, почему вам стоит рассмотреть использование MongoDB в вашем проекте.

1. Отсутствие схемы.

Это самое очевидное преимущество. Если вы работаете над новым стартапов, в которым бизнес-модель еще не до конца ясна и с большой вероятностью проект до выхода на рынок претерпит множество изменений, в том числе на уровне организации данных — посмотрите в сторону NoSQL решений, в частности на Монгу. Все дело в том, что в отличие от моего горячо любимого PostgreSQL в Монге просто нет необходимости создавать таблицы, менять их схемы, создавать миграции, заботиться о типах данных. Однако тут будьте осторожны. Очевидный плюс этого пункта, что вам гораздо проще создавать новые таблицы, добавлять и убирать поля. Настолько просто, что в Mongoid (ORM для MongoDB) вы просто добавляете в вашу модель строчку а-ля field :text, type: String и все, при следующей записи в бд у нового элемента будет это поле. Если же вы вставляете данные без ORM — то вам и никакие «строчки» не нужны — просто пихайте, что душе угодно. Но тут же и темная сторона этой силы. Вы не можете быть вполне уверены, что в конкретном документе у вас есть конкретное поле. (примечание: документами в MongoDB называются записи в коллекции). Т.е. если раньше у вас не было поля text и вы добавили несколько записей, а потом добавили это поле и добавили еще записи — в старых записях у вас этого поля, конечно же, не появится. Спасибо Mongoid, он сделает вид, что такое поле есть и у них и просто вернет значение null.

2. Легкость горизонтального масштабирования.

Горизонтальное масштабирование требуется когда вам необходимо запихнуть в базу данных информации больше, чем диск на вашем сервере. Все, что связано с горизонтальным масштабированием является визитной карточкой любой NoSQL базы данных. Дальше они уже соревнуются в том, у кого выше надежность, у кого быстрее запись, у кого быстрее чтение и т.д. На момент написания этой статьи в PostgreSQL нет встроенного механизма горизонтального масштабирования. Есть сторонние проприетарные решения (не могу не упомянуть компанию Citus, они делают прекрасную работу). В MongoDB же это делается предельно просто, а статей про это написано много, и механизмы репликации вкупе с шардированием на ней работают прекрасно. Кроме того можно как позволить балансировщику автоматически выбирать, в какой шард складывать конкретные докуенты, так и задать правила относительно какого-то поля или набора болей.

3. Богатая функция аггрегации.

Язык SQL очень богатый и всем привычный, камней бросать я в него не стану. Однако то, как позволяет получать данные Монга однозначно заслуживает похвалы. Тут вам и map-reduce, и группировки по сложным условиям, и переформатирование документов на лету, и получение случайных документов, и сортировки. В общем все то, что вы можете выжать из SQL БД, плюс возможность записывать все это в формате pipeline’ов и с более читаемым синтаксисом.

Вот один из многих примеров из документации:

mongo

Пример MongoDB справа хоть и чуть более многословный, но гораздо более адекватно структурированый. Если вы только пришли с SQL базы данных, потребуется какое-то время на привыкание, но потом привыкаешь и возвращаться не хочется.

4. Создана для денормализации.

В MongoDB принято хранить данные так, как вам это удобно. В SQL базах данных всегда (примечание: на самом деле нет, стоит всегда думать головой и не воспринимать слово «всегда» как закон) стоит заботиться об организации данных, чтобы таблицы были нормализованные, а запросы строить так, чтобы они могли левой пяткой глаз почесать, но данные достать. В Монго если вам неудобно, в каком формате или в каком месте лежат данные — вы с чистой совестью можете их или переместить, потому что отсутствие схемы это подразумевает, или просто продублирвать данные в нужное место. Т.е. фактически у вас может быть одно и то же поле с одними и теми же данными, но в разных коллекциях. Или два поля в одной коллекции, а плюс к ним еще одно поле, которое является композицией первых двух. Но это опять таки та сила, которую следует применять с умом. Если вы будете неконтролируемо плодить поля в документах, поддержка на уровне понимания разработчиком сущности будет становиться все труднее и труднее.

5. Простой формат индексов.

Индексы в MongoDB называются предельно понятно и их использование практически лишено подводных камней. Например в Постгресе если у вас есть b-tree индекс на одно поле и gist индекс на другое — при запросе, который использует оба этих индекса, использоваться будет только один из них. В Монге таких сюрпризов меньше.

Заключение

Несомненно MongoDB не серебряная пуля. В ней есть свои неожиданные подводные камни. Например она автоматически не отрубает медленные запросы и они продолжают висеть, пока вы их не закроете саомостоятельно. Еще вы можете испытать низкую производительность при count запросе на больших коллекциях. Но это все вещи, которые ты однажды узнаешь и потом просто помнишь о них, потому что жить они не сильно мешают. Я не агитирую всех уходить с SQL БД и переводить продакшн проекты на Монгу, но если вы стоите перед выбором, какую базу данных взять для нового проекта — подумайте о ней. Если все-таки не решитесь экспериментировать с NoSQL решением — тогда берите PostgreSQL. Они очень динамично развиваются, у них есть частично-nosql решение в виде json полей в таблице, огромное количество документации и прекрасная производительность. В общем не пожалеете. Но это тема для другой статьи.

Мы рассказываем, как стать более лучшим разработчиком, как поддерживать и эффективно применять свои навыки. Информация о вакансиях и акциях эксклюзивно для более чем 8000 подписчиков. Присоединяйся!

Создание схемы коллекции в базе данных mongolab mongodb от node.js

Я новичок в node.js и mongodb . пожалуйста, помогите.

Я пытаюсь создать схему для коллекции пользователей в базе данных mongolab mongodb из приложения node.js с кодом ниже. Код, похоже, не работает (по крайней мере, я не получаю сообщений об ошибках), но я не вижу никаких признаков того, что он преуспевает. То есть, когда я иду в mongolab и смотрю на свою базу данных, я не вижу, чтобы была создана какая-либо схема — http://cl.ly/image/0f1y273m2i0X.

Может кто-нибудь объяснить, что я могу делать неправильно, или как я могу проверить, что мой код преуспел, и на самом деле была создана схема для моей коллекции?

Создан 10 ноя. 12 2012-11-10 14:08:33 RBR

2 ответа

Вы должны вставить документ первой. Схемы не определены явно в mongodb. После того, как вы введете документ, коллекция будет автоматически создана, и вы увидите ее в консоли mongolab.

после сохранения называют выше коллекция будет создана

Создан 10 ноя. 12 2012-11-10 15:54:45 Brian Cajes

Как это сделать? Что я должен добавить/изменить в коде выше? – RBR 11 ноя. 12 2012-11-11 00:41:16

Вы должны ознакомиться с документацией API mongoose. Существуют также примеры переполнения стека, например. http://stackoverflow.com/q/10520501/579461 – Brian Cajes 11 ноя. 12 2012-11-11 01:03:08

Я прочитал документ mongoose, и он сказал: «Модель — это класс, с которым мы строим документы». что подразумевается, что модель поставляется перед документом, но вам нужна схема для создания модели. Таким образом, порядок выглядит следующим образом: schema -> model -> document. Похоже, вы говорите, что порядок — это документ -> схема -> модель. Я смущен. – RBR 11 ноя. 12 2012-11-11 01:41:03

Указанный вами заказ верен, но вы не создали или не вставили документ. Пока вы не введете документ, сервер mongodb не будет создавать коллекцию в этом случае. На самом деле ничего не делается на стороне сервера, когда вы определяете свою схему или модель мангуста. Обновление ответа с помощью примера. – Brian Cajes 11 ноя. 12 2012-11-11 02:30:23

Aha! Спасибо, Брайан. Извините за путаницу . Я читаю эту книгу (в утренние часы утра, когда я действительно должен спать), и [я думал], что он сказал, что после создания схемы я должен увидеть что-то в монголабе который показывает, что схема была создана. Этого не произошло, поэтому я думал, что мой код терпит неудачу. Но теперь я понял. Еще раз спасибо. – RBR 11 ноя. 12 2012-11-11 03:03:01

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

Создан 30 авг. 15 2015-08-30 12:54:53 Shyam Bhagat

# Используем Mongoose для работы с Mongodb

В этом видео мы с вами разберем что такое пакет mongoose в nodejs. Для этого урока у вас должна быть установлена mongodb и node.

Итак mongoose — это ORM для базы данных mongodb для node. Для тех кто не знает, что такое ORM — это Object-relational mapping. То есть идея состоит, например, чтобы работать с mongodb в node мы могли бы использовать mongodb драйвер. Это очень низкоуровневая библиотека, которая просто дает возможность делать обращения к базе. ORM же позволяет создавать модели и зависимости между ними и использовать специальный API для работы с базой. Это, конечно, не так гибко, как выполнять запросы к базе напрямую, но дает возможность лучше структурировать ваш код.

У меня создан пустой проект в который я установил 2 пакета: mongoose и bluebird.

Пакет bluebird — это библиотека для промисов. Здесь она нам понадобится, чтобы указать mongoose, какие промисы нужно использовать.

Также, не забудьте, что вам нужно запустить процесс mongodb. Например на mac я его запускаю в консоли командой mongod.

Итак у меня есть index.js файл и в него давайте зарекваирим mongoose.

После этого мы хотим указать mongoose правильные промисы.

Если вы не напишите эту строчку, то получите много варнингов от mongoose в консоли.

Далее мы хотим подключится к нашей базе mongodb. Это можно сделать с помощью команды connect.

Первым параметром мы указываем host и название базы. Вторым параметром опции для connect.

После коннекта мы можем получить из mongoose connection, с которым мы дальше будем работать.

Теперь мы должны обработать ошибку, например, если у нас не получилось подключиться к базе данных.

Если мы попробуем остановить процесс mongodb и запустить сервер, то мы получим ошибку, которую мы увидим именно из-за подписки на on error.

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

Если мы перезапустим вебсервер и посмотрим в консоль, то у нас должнo вывестить «we are connected».

Теперь мы готовы к использованию mongoose.

Так как вся логика работы с mongoose построена на моделях, то нам нужно создать модель, с которой мы хотим работать. Давайте создадим модель User в отдельном файле models/user.

Сначала мы импортируем пакет mongoose и описываем схему нашего usera. У нас будет одно поле name, типа String. После этого мы должны из схемы создать модель. В этом нам поможет mongoose.model. И экспортируем ее, чтобы использовать в других местах.

Теперь давайте импортируем ее в index.js

Теперь мы можем работать с моделью, а не с mongodb напрямую. Например, давайте создадим нового юзера.

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

Но new User в базу ничего не сохраняет. Теперь, если мы хотим сохранить этого юзера в базу, то мы должны на экземпляре вызвать метод save.

Если мы посмотрим в консоль, то наш user был успешно сохранен.

Теперь давайте попробуем найти этого юзера по id. Для этого давайте закомментим создание и напишем.

Mongoose предоставляет нам специальный метод, для поиска записи по id. Обратите внимание, что мы не указываем из какой коллекции брать данные. Mongoose сам создает под каждую модель нужную коллекцию и нам остается только использовать правильное API.

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

Обязательно пишите в комментариях, если вы хотите больше уроков по функционалу и возможностям mongoose.

MongoDB Начало работы с MongoDB

замечания

  • Данные в мире начали сильно расти после того, как на рынок появилось мобильное приложение. Это огромное количество данных стало практически невозможно обрабатывать с традиционной реляционной базой данных — SQL. Базы данных NoSQL вводятся для обработки данных, в которых гораздо больше гибкости, чем переменное количество столбцов для каждой информации.
  • MongoDB является одной из ведущих баз данных NoSQL. Каждая коллекция содержит несколько документов JSON. Любая модель данных, которая может быть выражена в документе JSON, может быть легко сохранена в MongoDB.
  • MongoDB — это база данных сервера-клиента. Сервер обычно работает с двоичным файлом mongod а клиент работает с mongo .
  • В MongoDB до v.3.2 не существует операции объединения по различным философским и прагматическим причинам . Но Mongo shell поддерживает javascript, поэтому, если $ lookup недоступен, можно имитировать операции объединения с документами в javascript перед вставкой.
  • Чтобы запустить экземпляр в рабочей среде, настоятельно рекомендуется следовать Контрольному списку операций .

Версии

Версия Дата выхода
3,4 2020-11-29
3,2 2015-12-08
3.0 2015-03-03
2,6 2014-04-08
2,4 2013-03-19
2,2 2012-08-29
2,0 2011-09-12
1,8 2011-03-16
1,6 2010-08-31
1.4 2010-03-25
1.2 2009-12-10

Основные команды на оболочке монго

Показать все доступные базы данных:

Выберите конкретную базу данных для доступа, например mydb . Это создаст mydb если он еще не существует:

Показать все коллекции в базе данных (обязательно выберите один из них, см. Выше):

Показать все функции, которые можно использовать с базой данных:

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

db.dropDatabase() используется для удаления существующей базы данных.

Дополнительные условия

Условия использования SQL Условия MongoDB
База данных База данных
Таблица Коллекция
Entity / Row Документ
колонка Ключ / поле
Таблица Join Встроенные документы
Основной ключ Первичный ключ (по умолчанию ключ _id предоставлен самим mongodb)

Выполнение файла JavaScript в MongoDB

Объяснение: Эта операция выполняет myjsfile.js скрипт в mongo оболочки , который подключается к mydb базе данных на mongod например , доступной через localhost интерфейс на порт 27017 . localhost:27017 не является обязательным, так как используется порт mongodb по умолчанию.

Кроме того, вы можете запустить .js файл из консоли mongo .

Привет, мир

После процесса установки следующие строки должны быть введены в оболочку mongo (клиентский терминал).

Объяснение:

  • В первой строке мы вставили парный документ < key : value >в test базу данных по умолчанию и в коллекции с именем world .
  • Во второй строке мы извлекаем данные, которые мы только что вставили. Полученные данные сохраняются в переменной javascript с именем cur . Затем функцией next() мы извлекли первый и единственный документ и сохранили его в другой переменной js с именем x . Затем напечатайте значение документа, содержащего ключ.

Монтаж

Чтобы установить MongoDB, выполните следующие действия:

Для Mac OS:

  • Существует два варианта для Mac OS: ручная установка или доморощенный .
  • Установка с помощью доморощенного :
    • Введите в терминал следующую команду:
  • Установка вручную:

      Загрузите последнюю версию здесь . Убедитесь, что вы загружаете соответствующий файл, специально проверьте, является ли ваш тип операционной системы 32-разрядной или 64-разрядной. Загруженный файл находится в формате tgz .

      Перейдите в каталог, в который загружен этот файл. Затем введите следующую команду:

      Вместо xyz будет отображаться информация о версии и системе. Выделенная папка будет иметь то же имя, что и файл tgz . Внутри папки их будет подпапка с именем bin которая будет содержать несколько двоичных файлов вместе с mongod и mongo .

      По умолчанию сервер хранит данные в папке /data/db . Итак, мы должны создать этот каталог, а затем запустить сервер, имеющий следующие команды:

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

      Он запускает сервер по порту 27017 по умолчанию.

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

      По умолчанию он подключается к test базе данных. Если вы видите такую ​​строку, как connecting to: test . Затем вы успешно установили MongoDB. Congrats! Теперь вы можете проверить Hello World, чтобы быть более уверенным.

      Для Windows:

      Загрузите последнюю версию здесь . Убедитесь, что вы загружаете соответствующий файл, специально проверьте, является ли ваш тип операционной системы 32-разрядной или 64-разрядной.

      Загруженный двоичный файл имеет расширение exe . Запустить его. Появится приглашение мастера установки.

      Нажмите « Далее» .

      Примите лицензионное соглашение и нажмите « Далее» .

      Выберите « Полная установка».

      Нажмите « Установить» . Это может вызвать окно для запроса разрешения администратора. Нажмите « Да» .

      После установки нажмите « Готово» .

      Теперь mongodb установлен на пути C:/Program Files/MongoDB/Server/3.2/bin . Вместо версии 3.2 может быть какая-то другая версия для вашего дела. Имя пути будет изменено соответствующим образом.

      bin содержат несколько двоичных файлов вместе с mongod и mongo . Чтобы запустить его из другой папки, вы можете добавить путь в системный путь. Сделать это:

      • Щелкните правой кнопкой мыши Мой компьютер и выберите « Свойства» .
      • Нажмите « Расширенные настройки системы» на левой панели.
      • Нажмите « Переменные среды» . на вкладке « Дополнительно ».
      • Выберите « Путь» в разделе « Системные переменные » и нажмите « Изменить . » .
      • Перед Windows 10 добавьте точку с запятой и вставьте путь, указанный выше. В Windows 10 есть кнопка « Создать» , чтобы добавить новый путь.
      • Нажмите OK, чтобы сохранить изменения.

      Теперь создайте папку с именем data имеющую подпапку с именем db где вы хотите запустить сервер.

      Начните с командной строки. Либо изменив путь в cmd, либо щелкнув по открытому окну команды Open, который будет виден после щелчка правой кнопкой мыши на пустом пространстве графического интерфейса папки, нажимая клавиши Shift и Ctrl вместе.

      Напишите команду для запуска сервера:

      Он запускает сервер по порту 27017 по умолчанию.

      Откройте другую командную строку и введите следующую команду для запуска клиента:

      По умолчанию он подключается к test базе данных. Если вы видите такую ​​строку, как connecting to: test . Затем вы успешно установили MongoDB. Congrats! Теперь вы можете проверить Hello World, чтобы быть более уверенным.

      Для Linux: почти такая же, как Mac OS, за исключением некоторой эквивалентной команды.

        Для дистрибутивов на основе Debian (с использованием apt-get ):

        Импортируйте ключ репозитория MongoDB.

        Добавить репозиторий в список пакетов на Ubuntu 16.04 .

        на Ubuntu 14.04 .

        Обновить список пакетов.

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

        Вставить следующий текст.

        Обновить список пакетов.

        Выполнение вывода поиска, читаемого в оболочке

        Мы добавляем три записи в наш тестовый сбор:

        Если мы увидим их через find, они будут выглядеть очень уродливо.

        Чтобы обойти это и сделать их читаемыми, используйте функцию pretty ().

Добавить комментарий