MongoDB: уголки и закоулки

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

Сегодня мы рассмотрим, как использовать MongoDB, одну из самых популярных баз данных NoSQL.

Оглавление

  • Установка и настройка
  • Запуск сервера MongoDB
  • Команды базы данных
  • Типы данных в Mongodb
  • Выполнение операций над коллекциями
    • Создать коллекцию
    • Удалить коллекцию
    • Вставка документа в коллекцию
    • Вставка вложенного объекта в коллекцию
    • Очистить экран
    • Генерация пользовательского идентификатора
    • Вставка нескольких записей с использованием массивов объектов
  • Запрос документов
    • Найти все
    • Отключить определенное поле в mongodb
    • Ограничение
    • Условие сортировки
    • Сортировка по нескольким полям
    • Пропуск записей
    • Фильтрация по нескольким полям
    • Синтаксис выбора
  • Операторы
    • Оператор ИЛИ $or логика
    • Больший оператор $gt чем логика
    • Меньше или равно $lte
    • In оператор $in
  • Смешивание сложных запросов
    • не запрос
    • Доступ к вложенным объектам и получение определенного массива
  • Агрегация
  • Ресурсы

Необходимые условия

🎯 Установленные MongoDB и mongoshell. Скачайте

🎯 Добавьте путь к MongoDB в переменную окружения


Проверка правильности установки MongoDB

Чтобы проверить, правильно ли у вас установлена MongoDB и добавлена ли она в переменную окружения, выполните команду mongo --version в терминале.

Результат:


Запуск сервера MongoDB

Способ 1:

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

Результат:

Метод 2:

На вашем терминале запустите mongo.exe
Результат:

Теперь, когда мы подтвердили установку MongoDB, давайте посмотрим, как мы можем перемещаться по MongoDB.


Для просмотра db

 show dbs
Войдите в полноэкранный режим Выйти из полноэкранного режима


Для просмотра коллекций

show collections
Войти в полноэкранный режим Выйти из полноэкранного режима


Чтобы использовать базу данных:

use [database name]
use blog
Войти в полноэкранный режим Выйти из полноэкранного режима

Удаление всей базы данных

db.dropDatabase()
Войти в полноэкранный режим Выйти из полноэкранного режима

Выход из терминала

exit 
Ctrl + C
Войти в полноэкранный режим Выйти из полноэкранного режима

Типы данных в Mongodb

Mongodb использует BSON, т.е. пары ключ-значение

{
    string:"strings",
    int:405,
    double: 3.565,
    boolean: true, || false
    array: [1,23,4,5]
    object:{attr1: "", attr2:"",attr3:""},
    date:new Date("YYYY-mm-dd"),
    no_value: null
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Создать коллекцию

db.createCollection([collection name])
db.createCollection("students")
Войти в полноэкранный режим Выйти из полноэкранного режима

Сбросить коллекцию

db.students.drop()
Войти в полноэкранный режим Выйти из полноэкранного режима

Вставка одного документа (json-объекта) в коллекцию

db.students.insertOne({name: "Abayomi", age:4, email:"joe@gmail.com"})
Войти в полноэкранный режим Выйти из полноэкранного режима

Результат: _id — уникальный идентификатор.

Разбивка{name: «Abayomi»} называется документом и живет внутри коллекции, т.е. каждый объект, хранящийся в коллекции в db, называется документом.


Вставка вложенного объекта

db.students.insertOne({name: "yomi", age:56, address:{street:"ajaka makun"}, hobbies:["gyming"]})
Вход в полноэкранный режим Выйти из полноэкранного режима

очистить экран

(Ctrl + L) 
Войти в полноэкранный режим Выйти из полноэкранного режима

Вы можете генерировать пользовательский идентификатор

db.students.insertOne({name: "joan", age:56, _id:256})
Войти в полноэкранный режим Выйти из полноэкранного режима

Добавление массивов

db.students.insertOne({name: "jinx", hobbies: ["sking", "fighting"]})

db.students.insertOne({name: "jinx", hobbies: ["sking", "fighting"], contact: 0808083423, startDate: new Date("2020-08-89")})
Войти в полноэкранный режим Выход из полноэкранного режима

Вставка нескольких записей с помощью массивов объектов

db.students.insertMany([{name: "jude", age:9}, {name: "james", age:78}, {name: "amry", age:239}])
Войти в полноэкранный режим Выход из полноэкранного режима

Поиск и запрос документов

Найти все:

db.students.find({})
Войти в полноэкранный режим Выйти из полноэкранного режима

Отключить определенное поле

db.students.find({}, {_id:0})
Войти в полноэкранный режим Выйти из полноэкранного режима

Ограничить запрос

db.students.find({}, {_id:0}).limit(2)
This removes all _id 
Войти в полноэкранный режим Выйти из полноэкранного режима

Сортировка запроса

db.students.find({}, {_id:0}).sort({name: 1})
1 means ascending order
-1 means descending order
Войти в полноэкранный режим Выйти из полноэкранного режима

Название располагается в алфавитном порядке

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

db.students.find({}, {_id:0}).sort({age: -1, name: 1})
1= asacending order
-1 = descending order
Войти в полноэкранный режим Выйти из полноэкранного режима

Поиск с помощью фильтрации с использованием запросов «где

db.students.find({age: 4}, {_id:0}).sort({name: 1, age:-1})
Войти в полноэкранный режим Выход из полноэкранного режима

Пропуск записей

db.students.find().skip(1).sort({age: 1, name: 1}).limit(2)
This skips the first entry gotten from he database
Войти в полноэкранный режим Выйти из полноэкранного режима

Фильтрация с использованием нескольких полей

db.students.find({name: "joan", age: 56})
Войти в полноэкранный режим Выйти из полноэкранного режима

Выбор синтаксиса

db.students.find({}, {name: 1, age: 1, _id: 0})
This selects only the name and age property it will not populate other info like address and hobbies and also omits the _id property
Войти в полноэкранный режим Выйти из полноэкранного режима

Оператор OR $or логика

db.students.find({$or: [{name:"abayomi"}, {age:56}]}, {_id:0})
Вход в полноэкранный режим Выйти из полноэкранного режима

Оператор Greater $gt чем логика

db.students.find({age:{$gt: 10}})
Войдите в полноэкранный режим Выход из полноэкранного режима

Получает все поля с возрастом более 10 лет.

Меньше или равно $lte

db.students.find({age:{$lte: 10}}).sort({age: -1})
Войти в полноэкранный режим Выйти из полноэкранного режима

Другие операторы сравнения, заслуживающие внимания: $eq, $ne,.

Оператор In $in

db.students.find({name: {$in:["Abayomi", "joan"]}})
Вход в полноэкранный режим Выйти из полноэкранного режима
  • Находит все данные, у которых name есть Abayomi и джоан

Смешивание сложных запросов

db.students.find({age:{ $gte:9, $lt:240} })
Here we are saying age is less than 10, greater than 36
Вход в полноэкранный режим Выйти из полноэкранного режима

Не запрос

db.students.find({age:{$not:{$lte:34}}})
Войти в полноэкранный режим Выйти из полноэкранного режима

* Получаются все возрасты не меньше или равные 34.

Доступ к вложенным объектам и получение определенного массива

db.students.find({"address.street": "ajaka makun"})
Вход в полноэкранный режим Выход из полноэкранного режима

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

db.students.countDocuments({age:{$lte: 23}})
Вход в полноэкранный режим Выход из полноэкранного режима

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

db.students.updateOne({name: "joan"}, {$set:{name:"Joana Sisily"}})
Войти в полноэкранный режим Выйти из полноэкранного режима

Обновление с помощью идентификатора

db.students.updateOne({_id: ObjectId("622875510fc8edaf452c0e13")}, {$set:{age:459}})
Войти в полноэкранный режим Выйти из полноэкранного режима

Найти по идентификатору

db.students.findOne({_id: ObjectId("6199abeeb73c785f519a29e3")})
Войти в полноэкранный режим Выйти из полноэкранного режима

* Возвращает null, если id не найден

Увеличить

db.students.updateOne({_id: ObjectId("622875f90fc8edaf452c0e15")}, {$inc:{age:9}})
Войти в полноэкранный режим Выйти из полноэкранного режима

Это увеличивает значение возраста на 9, начальное значение равно 9, конечное значение будет 18.

#### Переименование полей

db.students.updateOne({_id: ObjectId("622875f90fc8edaf452c0e15")}, {$rename:{age:"studentAge"}}))
Ввод полноэкранного режима Выйти из полноэкранного режима

Оператор Not-in

Отрицание вывода

db.students.find({name: {$nin:["Abayomi", "joan"]}})
Вход в полноэкранный режим Выход из полноэкранного режима


Проверьте, существует ли поле или данные

1) db.students.find({name: {$exists: true}})
2) db.students.find({major: {$exists: false}}, {_id:0})
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Пример 2: Ничего не возвращает

BSON-индексация

Чтобы вернуть тип данных, используя BSON-индексацию, т.е. строка равна 2.

db.students.find({name: {$type: 2}})
2 means strings: this will return all name fields that is strings
Войдите в полноэкранный режим Выход из полноэкранного режима

источник

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

т.е. нацелиться на определенный элемент в массиве

Получить размер массива

Например, если в массиве 4, 5, 6 и т.д. элементов.

db.students.find({hobbies: {$size: 2}})
Вход в полноэкранный режим Выйти из полноэкранного режима

Сопоставление элементов

Проверка соответствия и возврат соответствующего элемента в массиве

db.students.find({hobbies: {$elemMatch: {$eq: "sking"}}})
Войти в полноэкранный режим Выход из полноэкранного режима

Обновление множества записей

updates all instance of the name:mimi
db.students.updateMany({name: "mimi"},{$set: {name:"miracle"}})
Войти в полноэкранный режим Выход из полноэкранного режима

Заменить поле полностью

db.students.replaceOne({name: "Abayomi"},{name: "Joseph abayomi", age: 90, student: true})
Войти в полноэкранный режим Выйти из полноэкранного режима

Удалить записи

db.collectionName.action

db.students.deleteMany({}) ==> deletes all
Войти в полноэкранный режим Выйти из полноэкранного режима

Удаление с помощью параметров запроса

db.students.deleteMany({name: "xu"})
Войти в полноэкранный режим Выйти из полноэкранного режима

Удалить один

db.students.deleteOne({name: "xu"})
Войти в полноэкранный режим Выйти из полноэкранного режима

Массовая запись

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

db.students.bulkWrite(
      [
         { insertOne :
            {
               "document" :
               {
                  name: "James", occupation: "Developer"
               }
            }
         },
         { insertOne :
            {
               "document" :
               {
                  name: "Travesy", occupation: "backend"
               }
            }
         },
         { updateOne :
            {
               filter : { name : "James" },
               update : { $set : { occupation: "content-writer"} }
            }
         },
         { deleteOne :
            { filter : { name : "Abayomi"} }
         },
         { replaceOne :
            {
               filter : { name : "James" },
               replacement : { name: "James Bond", }
            }
         }
    ],
    {ordered: false}
   );
Войти в полноэкранный режим Выход из полноэкранного режима

Индексирование текста

Это синоним строки поиска на стороне клиента.


db.students.insertMany([{name: "John", desc: "Young and fair"},{name: "Doe", desc: "fair but young and silly"}, {name: "Dare", desc: "young and beautiful "}])
Войти в полноэкранный режим Выход из полноэкранного режима

Создание текстовой индексации

db.students.createIndex( { name: "text", desc: "text" } )
Вход в полноэкранный режим Выход из полноэкранного режима

db.students.find({ $text: {$search: "fair" } })
Войти в полноэкранный режим Выйти из полноэкранного режима


Let's attach precedence score to search query
db.students.find(
   { $text: { $search: "Young and fair" } },
   { score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )
Войти в полноэкранный режим Выход из полноэкранного режима

Агрегация


db.students.insertMany([{item : "pencil", total: 10.75, student: "Wick"}, {item : "pen", total: 50, student: "John"}, {item : "book", total: 11.33, student: "Thanos"}, {item : "ruler", total: 8.50, student: "Thanos"}, {item : "book", total: 4.75, student: "James"}, {item : "pen", total: 4.75, student: "Wick"}, {item : "bag", total: 4.75, studstudent: "John"}])

Войти в полноэкранный режим Выйти из полноэкранного режима

Получение общего количества книг

db.students.countDocuments({item: "pen"})
Войти в полноэкранный режим Выйти из полноэкранного режима

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

db.students.aggregate(
     [
          {$match: {} },
          {$group: {_id: "$student", total: { $sum: "$total"} } }
     ]
)
Войти в полноэкранный режим Выйти из полноэкранного режима

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

db.students.aggregate(
     [
          {$match: {} },
          {$group: {_id: "$item", total: { $sum: "$total"} } },
          {$sort: {total: -1}}
     ]
)
Войти в полноэкранный режим Выйти из полноэкранного режима

Узнайте, сколько денег каждый покупатель потратил на книгу и ручку

db.students.aggregate(
     [
          {$match: {item: {$in: ["book", "pen"]} } },
          {$group: {_id: "$item", total: { $sum: "$total"} } },
     ]
)
Войти в полноэкранный режим Выйти из полноэкранного режима

Ресурсы

Ссылка на типы Bson
Ссылка на агрегацию
сайт mongodb
Майк Дейн

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *