Работа с базами данных и запросы могут отнимать много времени, поэтому нам, как разработчикам, необходима база данных, которая была бы одновременно гибкой и способной ускорить процесс разработки.
Сегодня мы рассмотрим, как использовать 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
Майк Дейн