381.12K
Категория: Базы данныхБазы данных

MongoDB. Часть 2

1.

NoSQL
SQL
MongoDB ч.2
2023. Технологии разработки программного обеспечения.

2.

NoSQL
SQL
Индексы
2023. Технологии разработки программного обеспечения.

3.

NoSQL
SQL
Простой индекс поля
{
"_id":
ObjectId("5f9e83f16d4e88cc16dbd7a1"),
"name": "Kevin",
"age": 32,
"color": "yellow",
"hobbies": ["banana eating",
"mischief"],
"address": {
"city": "Minionville",
"country": "Despicable Land"
}
}
db.minions.createIndex({ "name": 1 })
2023. Технологии разработки программного обеспечения.

4.

NoSQL
SQL
Простой индекс поля с явным именем
{
"_id":
ObjectId("5f9e83f16d4e88cc16dbd7a1"),
"name": "Kevin",
"age": 32,
"color": "yellow",
"hobbies": ["banana eating",
"mischief"],
"address": {
"city": "Minionville",
"country": "Despicable Land"
}
}
db.minions.createIndex({ "name": 1 }, { name: "index_name" })
2023. Технологии разработки программного обеспечения.

5.

NoSQL
SQL
Индекс поля вложенного документа
{
"_id":
ObjectId("5f9e83f16d4e88cc16dbd7a1"),
"name": "Kevin",
"age": 32,
"color": "yellow",
"hobbies": ["banana eating",
"mischief"],
"address": {
"city": "Minionville",
"country": "Despicable Land"
}
}
db.minions.createIndex({ «address.city": 1 })
2023. Технологии разработки программного обеспечения.

6.

NoSQL
SQL
Удаление индекса
{
"_id":
ObjectId("5f9e83f16d4e88cc16dbd7a1"),
"name": "Kevin",
"age": 32,
"color": "yellow",
"hobbies": ["banana eating",
"mischief"],
"address": {
"city": "Minionville",
"country": "Despicable Land"
}
}
db.minions.dropIndex("index_name")
2023. Технологии разработки программного обеспечения.

7.

NoSQL
SQL
Рассмотрим простой запрос
db.pets.find({ name: "Fido" });
2023. Технологии разработки программного обеспечения.

8.

NoSQL
SQL
Рассмотрим простой запрос
db.pets.find({ name: "Fido" }).explain("executionStats");
2023. Технологии разработки программного обеспечения.

9.

NoSQL
SQL
Рассмотрим простой запрос
2023. Технологии разработки программного обеспечения.

10.

NoSQL
SQL
Создадим индексы и проверим
db.pets.createIndex({ name: 1 });
db.pets.find({ name: "Fido" }).explain("executionStats");
db.pets.find({ name: "Fido" }).count();
db.pets.getIndexes();
2023. Технологии разработки программного обеспечения.

11.

NoSQL
SQL
Составные индексы
2023. Технологии разработки программного обеспечения.

12.

NoSQL
SQL
Составной индекс
{
"_id":
ObjectId("5f9e83f16d4e88cc16dbd7a1"),
"name": "Kevin",
"age": 32,
"color": "yellow",
"hobbies": ["banana eating",
"mischief"],
"address": {
"city": "Minionville",
"country": "Despicable Land"
}
}
db.minions.createIndex({ "name": 1, "color": 1 })
2023. Технологии разработки программного обеспечения.

13.

NoSQL
SQL
Уникальные индексы
db.pets.createIndex({ index: 1 }, { unique: true });
# Попробуем добавить новую запись с повторным индексом
db.pets.insertOne({ name: "Doggo", index: 10 });
2023. Технологии разработки программного обеспечения.

14.

NoSQL
SQL
Запросим запись по индексу
db.pets.find({ index: 1337 }).explain("executionStats");
2023. Технологии разработки программного обеспечения.

15.

NoSQL
SQL
Полнотекстовый поиск
db.pets.createIndex({
type: "text",
breed: "text",
name: "text",
});
2023. Технологии разработки программного обеспечения.

16.

NoSQL
SQL
Специальный оператор $text
db.pets.find({ $text: { $search: "dog Havanese Luna" } });
2023. Технологии разработки программного обеспечения.

17.

NoSQL
SQL
Специальный оператор $text
db.pets
.find({ $text: { $search: "dog Havanese Luna" } })
.sort({ score: { $meta: "textScore" } });
2023. Технологии разработки программного обеспечения.

18.

NoSQL
SQL
Маркеры для результата
db.pets
.find({ $text: { $search: "-cat Luna" } })
.sort({ score: { $meta: "textScore" } });
https://www.mongodb.com/docs/manual/reference/operator/query/text/
2023. Технологии разработки программного обеспечения.

19.

NoSQL
SQL
Агрегации
2023. Технологии разработки программного обеспечения.

20.

NoSQL
SQL
Агрегации
2023. Технологии разработки программного обеспечения.

21.

NoSQL
SQL
Агрегации-pipeline
db.minions.aggregate([
{ $match: { age: { $gte: 18 } } },
{ $group: { _id: "$color", count: { $sum: 1 } } },
{ $sort: { count: -1 } },
]);
2023. Технологии разработки программного обеспечения.

22.

NoSQL
SQL
Агрегации-Map-Reduce:
db.minions.mapReduce(
functionMap () {
if (this.age >= 18) {
emit(this.color, 1);
}
},
functionReduce (key, values) {
return Array.sum(values);
},
{
query: { age: { $gte: 18 } },
out: "minions_color_count"
}
);
2023. Технологии разработки программного обеспечения.

23.

NoSQL
SQL
Агрегации
db.minions.count({ age: { $gte: 18 } });
db.minions.aggregate([
{ $group: { _id: null, totalMinions: { $sum: 1 } } }
]);
2023. Технологии разработки программного обеспечения.

24.

NoSQL
SQL
Агрегации
db.pets.aggregate([
{
$bucket: {
groupBy: "$age",
boundaries: [0, 3, 9, 15],
default: "very senior",
output: {
count: { $sum: 1 },
},
},
},
]);
2023. Технологии разработки программного обеспечения.

25.

NoSQL
SQL
Агрегации
db.pets.aggregate([
{
$bucket: {
groupBy: "$age",
boundaries: [0, 3, 9, 15],
default: "very senior",
output: {
count: { $sum: 1 },
},
},
},
]);
2023. Технологии разработки программного обеспечения.

26.

NoSQL
SQL
Агрегации
db.pets.aggregate([
{
$match: {
type: "dog",
},
},
{
$bucket: {
groupBy: "$age",
boundaries: [0, 3, 9, 15],
default: "very senior",
output: {
count: { $sum: 1 },
},
},
},
]);
2023. Технологии разработки программного обеспечения.

27.

NoSQL
SQL
Задание
2023. Технологии разработки программного обеспечения.

28.

NoSQL
SQL
Есть вопросы?
2023. Технологии разработки программного обеспечения.
English     Русский Правила