— — — — — — — — — — — — — — — — — — — — — — — — — — —

Для тех, кто заинтересован в получении сертификата:

Оценка:

50% общего балла зависит от итогового экзамена, а оставшиеся 50% - от лабораторной работы / задания, которое предполагается выполнять на протяжении всего курса.

Общая оценка:

(Оценка за домашнее задание + Оценка за экзамен) / 2

Проходной балл составляет 65 процентов, и вы получите этот сертификат в случае успеха:

Экосистема MongoDb состоит из двух основных компонентов.

  1. Атлас: облачная служба хранения данных.
  2. Compass / MongoShell: Compass - это клиент с графическим интерфейсом пользователя, имеющий различные функции, которые помогают выполнять простые запросы, тогда как MongoShell - более гибкий текстовый клиент, способный выполнять сложные запросы, и полноценный интерпретатор JavaScript.

Хранение данных документа в MongoDB:

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

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

Документ в MongoDb отмечает только объект JSon (пары ключ-значение)

— — — — — — — — — — — -

  • Безопасность: нам разрешено иметь разные настройки авторизации (безопасности) на уровне базы данных и коллекции, но не на уровне документа.

— — — — — — — — — — — -

  • Типы данных, поддерживаемые моделью документа MongoDb:

1 ›Строка

2 ›Дата

3 ›Числовые значения:

3.a ›Int32 (Целое число)

3.b ›Двухместный

3.c ›Десятичный (для точных вычислений с плавающей запятой, используется всякий раз, когда требуется точность)

4 ›Null

5 ›Типы агрегированных значений:

5.a ›Массивы

5.b ›Вложенные документы / объекты Json

6 ›логическое значение (Истина / Ложь)

— — — — — — — — — — — -

Фильтры: они используются для фильтрации результатов, которые вас интересуют.

  • Для запросов в MongoDb используются различные типы фильтров:
  1. Фильтры равенства: они используются для точного совпадения критериев поиска с парой ключ-значение, чтобы выделить документ, который вы ищете.

например: db.myCollection.find ({«имя»: «Джон»})

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

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

например: db.myCollection.find («год рождения»: {«$ gte»: 1985, «$ lte»: 1990})

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

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

Дополнительный :

Геопространственные данные можно тактично использовать для запросов с помощью MongoDb Compass.

Если у вас есть документы в коллекции с гео-пространственными данными, то, выделив конкретный регион в Compass Gui Client, вы можете запросить определенные документы, которые находятся в выделенном вами диапазоне широты и долготы.

— — — — — — — — — — — -

Операции CRUD в MongoDb

Создать: insert () используется для вставки документов в коллекцию.

Чтение: find () используется для поиска интересующих вас документов на основе значений определенных пар ключ-значение.

Обновление: update () используется для обновления документов новыми данными или для изменения старых данных.

Удалить: remove () используется для удаления документов по определенным критериям.

— — — — — — — — — — — -

Кластерная архитектура MongoDb:

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

Здесь главное помнить, что каждый кластер MongoDb имеет только 1 ПЕРВИЧНЫЙ сервер, на который может выполняться запись.

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

— — — — — — — — — — — -

Команды MongoShell

  1. Показать базы данных: показывает все базы данных, присутствующие в текущем кластере.
  2. load («myJavaScriptFile.js»): поскольку Mongo Shell является полнофункциональным интерпретатором JavaScript, эта команда выполнит все содержимое указанного файла сценария Java.

Здесь можно найти гораздо больше операций, поддерживаемых MongoShell: Ссылка

— — — — — — — — — — — -

Вставка документов

Итак, в основном есть 2 способа добавления документов: -

1. С помощью клиента Compass Gui:

Убедившись, что вы подключены к основной базе данных (серверу), для этого вам просто нужно перейти к интересующей вас коллекции и добавить документ с помощью вкладки insertDocument.

2. Через оболочку MongoDb:

a ›InsertOne (): используется для ввода отдельного документа в коллекцию.

Пример :

db.myCollection.insertOne ({«ключ1»: «значение1»,

”Ключ2:” значение2,

”Key3:” value3})

b ›InsertMany (): используется для одновременного ввода нескольких документов в коллекцию.

Пример :

db.myCollection.insertMany ({«ключ1»: «значение1»,

”Ключ2:” значение2,

”Key3:” value3},

{«Ключ4»: «значение4»,

”Key5:” value5,

”Key6:” value6},

{«Ключ7»: «значение7»,

”Key8:” value8,

”Key9:” value8})

Итак, в этом примере в коллекцию одновременно вставляются три разных документа, имеющих свои собственные пары ключ-значение.

— — — — — — — — — — — -

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

* Один определяет критерий, на основе которого операция find () ищет интересующие вас документы.

Например: db.mycollection.find ({mpaKey: «Pg-13», год: 2009})

Это откроет все документы, которые имеют значение mpaKey в виде строки «Pg-13», а также год как 2009.

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

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

Например, если существует тип объекта под названием «ветер» в качестве ключа, который, в свою очередь, имеет объект под названием «направление», который, в свою очередь, имеет элемент под названием угол, и вы хотите найти все документы, которые имеют значение угла как 290 , то ваш запрос к MongoShell будет таким:

db.mycollection.find ({«wind.direction.angle»: 290}

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

Например: если вам нужно знать, сколько документов находится в коллекции movieDetails с заголовком: «Shawn of the Dead» , то следующий запрос должен помочь

db.movieDetails.find ({title: «Шон мертвых»}). count ()

# Прогнозы в запросах find (): если вас не интересует просмотр только определенных полей документов, которые появляются на основе вашего поискового запроса, вы можете использовать удобный операция проекции, чтобы избавиться от ненужной многословности

Если вы хотите просмотреть поле, будет использоваться 1

В то время как, если вы хотите исключить поле, будет использоваться 0

Например: если мы заинтересованы в поиске в поле «заголовок» всех ходов, относящихся к «жанру», Действие, то наш поисковый запрос будет выглядеть следующим образом:

db.movies.find ({genre: ”Action”}, // здесь указаны критерии поиска

{title: 1}) // здесь указываются интересующие поля

# Различные операции запроса:

1. Операторы сравнения:

Такие операторы, как $ lt (меньше чем), $ gt (больше чем), $ in, $ exists, $ type… и т. д. делают поисковый запрос гибким в зависимости от ваших требований.

Например, если найти все фильмы, в рейтинге которых есть значения «R» или «PG-13», мы напишем такой запрос:

db.moves.find (оценка:

{$ in: [“R”, ”PG-13]} // значение in следует за массивом значений, которые мы намереваемся

// найти

)

2. Операторы запроса элемента:

Есть несколько операторов, например $ exists, которые можно использовать для запроса об отсутствии / наличии определенного элемента в документе. Это становится особенно полезным, когда вы находитесь в процессе очистки данных и хотите удалить некоторые нерелевантные поля.

Например, если вы хотите узнать, есть ли в каких-либо документах поле mpaaRating, можно выполнить следующий запрос:

db.myCollection.find ({mpaaRating: {$ exists: true}}) // вы могли бы написать // false в качестве логического значения, если бы вы хотели видеть все документы, // не содержащие поля mpaaRating

Оператор запроса $ type используется для поиска документов в коллекции, состоящей из значений указанного ключа или определенного типа.

Например, если бы мы искали все документы, которые имеют тип поля viewerRating как int32, то мы бы написали следующее:

db.movies.find ({viewerRating: {$ type: int32}})

3. Логические операторы :

Это операторы $ and, $ or, $ not, и $ or, которые предлагают большое количество логическая гибкость при написании запросов find ()

И пример использования оператора $ или будет следующим. Если вам нужно найти все документы, в которых ключ «помидор» имеет значение больше, чем 95 ИЛИ со значением metacritic больше 88, то ваш запрос будет:

db.movieDetails.find ({$ или: [{

«Помидор.метр»: {$ gt: 95},

«Metacritic»: {$ gt: 88}}]

} )

Логический оператор $ и используется только в особых ситуациях, когда необходимо обеспечить соответствие нескольким критериям в одном поле в документе. Нет необходимости использовать операцию $ и, когда вам нужно фильтровать документы на основе нескольких критериев, поскольку различные критерии, которые вы указываете в операции find (), автоматически становятся И-ED.

Если выполнить следующий запрос: db.myCollection.find ({«metacritic»: null})

затем будут построены все документы, в которых значение поля «metacritic» равно null, а также все те документы, в которых даже нет поля. .

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

db.myCollection.find ({$ and: [{«metacritic»: null},

{«Matacritic»: {$ exists: true}}

]

})

4. Операторы массивов запросов:

Это операторы запроса, которые используются для запроса элементов в массивах в документах.

Операторы $ all, $ elemMatch и $ size - основные операторы, используемые для запроса значений в массивах документов. .

Например, если вы хотите просмотреть все документы, которые содержат все указанные вами значения в массиве (порядок значений не важен), тогда полезны операторы запроса $ all.

Если нам нужно найти все документы, в которых поле жанров имеет значения «Комедия», «Преступление» и «Драма», мы просто укажем массив с этими значениями, нацеленный на конкретный элемент массива по выбору, например:

db.movieDetails.find ({жанры: {$ all: [«Комедия», «Криминал», «Драма»]}})

Вышеупомянутый запрос выведет все документы, в которых есть все значения (например, «Комедия», «Криминал» и «Драма») в поле жанры.

$ elemMatch будет составлять документы, соответствующие значениям, указанным вами для элемента (ов) значения ключа в массиве. Например, если найти все документы, в которых в массиве boxOffice для страны элемента указано значение «Германия», а в том же массиве есть другой элемент, а именно доход должен быть больше 17, то следующий запрос вернет желаемые результаты:

db.myCollection, найдите ({boxOffice: {$ elemMatch:

{страна: "Германия",

доход: {$ gt: 17}

}

})

Операция запроса массива $ size используется для фильтрации всех документов, содержащих массив определенного размера.

Например, если нужно было искать все документы, в которых массив с именем country имел размер 1, можно было бы написать следующий запрос:

db.movieDetails.find ({страны: {$ size: 1}})

5. Операторы оценочного запроса:

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

Помните, что $ regex можно использовать только для фильтрации ключей со значениями STRING.

Итак, если мы хотим найти количество документов, которые имеют ключ «awards.text» как имеющие значение ключевой строки, начинающейся со слова «выиграл» , мы бы написали такой запрос:

db.movieDetails.find ({«awards.text»: {$ regex: / ^ Won. * /}}). count ()

Для целого ряда других таких операторов запросов вы можете посетить эту ссылку MongoDb

— — — — — — — — — — — -

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

  1. Обновить один: используется для обновления информации в документах. Название обновления «один» подразумевает, что оно обновит пару ключ: значение, указанную пользователем, только в первом документе, который соответствует критериям поиска, указанным пользователем. Если мы используем $ set ключевое слово, если ключа, упомянутого в операторе обновления, нет в документе, будет вставлен новый ключ с указанным значением.

Например, если мы намереваемся изменить ключ постера документа с названием фильма «Марсианин», то наш запрос будет следующим:

db.movieDatabase.updateOne ({title: «Марсианин»}, / это критерии поиска

{$ set: {// это конкретная операция

poster: ”http://new_address.com” // это значение обновления

}

} )

2. Обновить множество:. Разница между update one и update many заключается в том, что в update many все документы будут обновлены с указанной парой ключ-значение, которые соответствуют критериям поиска, заданным пользователем, тогда как update one просто обновит первый найденный документ. которые соответствуют указанным критериям.

Например, если мы намеревались удалить все пары «ключи: значение» из ходов в коллекции movieDetails, где ключ «с рейтингом» имел значение null, , то мы можем сделать это с помощью оператора $ unset, и запрос будет следующим:

db.movieDetails.updateMany ({Rated: null}, // Это критерии поиска

{$ unset: {// Этот оператор обновления unset удаляет соответствующее значение ключа

Rated: ””} // Значение, указанное в качестве значения, не имеет значения, т.е. // даже если бы мы сказали рейтинг: ”удалить / восстановить / что угодно”, тогда это тоже // имело бы тот же эффект

} )

Подобно операторам обновления $ set и $ unset, существует множество других операторов, которые можно использовать для других конкретных задач. … Одна их сумма - вкл. Долл.

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

Например, если кто-то хочет увеличить userReviews (который, в свою очередь, является элементом объекта помидор) отсчитайте фильм под названием «Марсианин», скажем, на 25 баллов, то запрос для этого будет следующим: следует

db.movieDetails.updateOne ({

title: «Марсианин»}, // Это приведет к поиску первого документа с

// название «Марсианин»

{$ inc: {

«Tomato.userReviews»: 25 // Это увеличит поле userReviews на 25

}

} )

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

Но если upsert имеет значение false,, тогда документ обновляется (т. Е. Заменяется), когда критерии запроса соответствуют любой документ.

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

db.myCollections, updateOne ({

title: ”Alien”}, // здесь мы указываем критерии поиска

{$ set: {// здесь мы устанавливаем содержимое документа

название: «Чужой»

год: 1989

рейтинг: 5

}

},{

upsert: true // мы указываем, что только если документ с заголовком «Марсианин» // отсутствует, этот документ должен быть помещен в коллекцию

}

})

  • ReplaceOne () и ReplaceMany () также являются полезными операциями для замены значений определенных ключей. интересующих вас документов.

Обширный список многих других таких полезных операторов обновления можно найти здесь: LINK

— — — — — — — — — — — -

Удалить операции

Как и предыдущие операции, операции удаления (deleteOne и deleteMany) также работают аналогичным образом.

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

db.reviews.deleteOne ({_ id: 234})

Если вам нужно удалить все записи документа фильма с заголовком «Hello World», сделайте следующее:

db.reviews.deleteMany ({title: ”Hello World”})

— — — — — — — — — — — -