Similar presentations:
Программирование. Лабораторная работа №12
1.
Лабораторная 122.
Задание• Задачи, в названии которых содержится слово «интеграция», но
оно не последнее
• Задача, относящаяся к 2 различным проектам
• Задача с самым поздним сроком окончания
• Проект с самым большим количеством задач
• Человек, у которого нет незавершенных задач
3.
Задачи данныеdb.tasks.find()
{ _id: ObjectId("6229f5b9d35e8755fcf68e39"),
task_name: 'пользовательский интерфейс',
created: 'Thu Mar 10 2022 15:57:29 GMT+0300 (Москва, стандартное время)',
started: 2022-03-24T00:00:00.000Z, ended: 2022-04-24T00:00:00.000Z, is_done: false }
{ _id: ObjectId("6229f5bad35e8755fcf68e3a"),
task_name: 'интеграция проектов 1 и 2',
created: 'Thu Mar 10 2022 15:57:30 GMT+0300 (Москва, стандартное время)',
started: 2022-03-24T00:00:00.000Z, ended: 2022-04-24T00:00:00.000Z, is_done: true }
{ _id: ObjectId("6229f5bad35e8755fcf68e3b"),
task_name: 'полная интеграция проектов 2 и 3',
created: 'Thu Mar 10 2022 15:57:30 GMT+0300 (Москва, стандартное время)',
started: 2022-05-24T00:00:00.000Z, ended: 2022-05-31T00:00:00.000Z, is_done: false }
{ _id: ObjectId("6229f718d35e8755fcf68e3c"),
task_name: 'работа с бд',
created: 'Thu Mar 10 2022 16:03:20 GMT+0300 (Москва, стандартное время)',
started: 2022-02-24T00:00:00.000Z, ended: 2022-03-24T00:00:00.000Z, is_done: false }
• Задачи, в названии которых содержится слово «интеграция», но оно
4.
Задачи, в названии которых содержитсяслово «интеграция», но оно не последнее
db.tasks.find({$and:[{"task_name":/интеграция/},{ "task_name" : { "$not" : /интеграция$/ } }]})
{ _id: ObjectId("6229f5bad35e8755fcf68e3a"),
task_name: 'интеграция проектов 1 и 2',
created: 'Thu Mar 10 2022 15:57:30 GMT+0300 (Москва, стандартное время)',
started: 2022-03-24T00:00:00.000Z,
ended: 2022-04-24T00:00:00.000Z,
is_done: true }
{ _id: ObjectId("6229f5bad35e8755fcf68e3b"),
task_name: 'полная интеграция проектов 2 и 3',
created: 'Thu Mar 10 2022 15:57:30 GMT+0300 (Москва, стандартное время)',
started: 2022-05-24T00:00:00.000Z,
ended: 2022-05-31T00:00:00.000Z,
is_done: false }
5.
Задача, относящаяся к 2 различным проектам• По шагам
1. Основа- Задача
2. Присоединить проекты
3. Создать поле с количеством проектов
4. Выбрать те задачи, у которых поле с количеством проектов>=2
6.
Задача, относящаяся к 2 различным проектамdb.tasks.aggregate([
{
$lookup:
{
from: "projects",
localField: "_id",
foreignField: "pr_tasks",
as: "project_tasks"
}
},
{$project:{"_id":1,"task_name":1,"num_proj":{$size:"$project_tasks"}}
{$match:{"num_proj":{ $gte: 2 }}
}
]
)
},
7.
Задача, относящаяся к 2 различным проектам{ _id: ObjectId("6229f5bad35e8755fcf68e3a"),
task_name: 'интеграция проектов 1 и 2',
num_proj: 2 }
{ _id: ObjectId("6229f5bad35e8755fcf68e3b"),
task_name: 'полная интеграция проектов 2 и 3',
num_proj: 2 }
8.
Задача с самым поздним срокомокончания
• Основа- Задача
9.
Максимальный срок• db.tasks.aggregate([
• {$project:{"_id":1,"task_name":1,"ended":1}
• },
• {$group:{
_id:null,
• max_end: { $max: "$ended" },
• "task_data": { "$push": "$$ROOT" }
• }
• }
• ])
10.
Максимальный срок{ _id: null,
{ _id: null,
max_end: 2022-05-31T00:00:00.000Z,
task_data:
[ { _id: ObjectId("6229f5b9d35e8755fcf68e39"),
task_name: 'пользовательский интерфейс',
ended: 2022-04-24T00:00:00.000Z },
{ _id: ObjectId("6229f5bad35e8755fcf68e3a"),
task_name: 'интеграция проектов 1 и 2',
ended: 2022-04-24T00:00:00.000Z },
{ _id: ObjectId("6229f5bad35e8755fcf68e3b"),
task_name: 'полная интеграция проектов 2 и 3',
ended: 2022-05-31T00:00:00.000Z },
{ _id: ObjectId("6229f718d35e8755fcf68e3c"),
task_name: 'работа с бд',
ended: 2022-03-24T00:00:00.000Z } ] }
11.
Добавляем возможность сравненияdb.tasks.aggregate([
{$project:{"_id":1,"task_name":1,"ended":1}
},
{$group:{
_id:null,
max_end: { $max: "$ended" },
"task_data": { "$push": "$$ROOT" }
}
},
{ $unwind : "$task_data" }
])
12.
Добавляем возможность сравнения{ _id: null,
{ _id: null,
max_end: 2022-05-31T00:00:00.000Z,
max_end: 2022-05-31T00:00:00.000Z,
task_data:
task_data:
{ _id: ObjectId("6229f5b9d35e8755fcf68e39"),
{ _id: ObjectId("6229f718d35e8755fcf68e3c"),
task_name: 'пользовательский интерфейс',
task_name: 'работа с бд',
ended: 2022-04-24T00:00:00.000Z } }
ended: 2022-03-24T00:00:00.000Z } }
{ _id: null,
max_end: 2022-05-31T00:00:00.000Z,
task_data:
{ _id: ObjectId("6229f5bad35e8755fcf68e3a"),
task_name: 'интеграция проектов 1 и 2',
ended: 2022-04-24T00:00:00.000Z } }
{ _id: null,
max_end: 2022-05-31T00:00:00.000Z,
task_data:
{ _id: ObjectId("6229f5bad35e8755fcf68e3b"),
task_name: 'полная интеграция проектов 2 и 3',
ended: 2022-05-31T00:00:00.000Z } }
13.
Добавляем поле равенстваdb.tasks.aggregate([
{$project:{"_id":1,"task_name":1,"ended":1}
},
{$group:{
_id:null,
max_end: { $max: "$ended" },
"task_data": { "$push": "$$ROOT" }
}
},
{ $unwind : "$task_data" },
{
$project:{"_id":"$task_data._id","task_nm":"$task_data.task_name","num":"$task_data.num_proj",max_end:1
,"is_eq":{$eq:["$task_data.ended","$max_end"]}}
}
])
14.
Добавляем поле равенства{ max_end: 2022-05-31T00:00:00.000Z,
_id: ObjectId("6229f5b9d35e8755fcf68e39"),
task_nm: 'пользовательский интерфейс',
is_eq: false }
{ max_end: 2022-05-31T00:00:00.000Z,
_id: ObjectId("6229f5bad35e8755fcf68e3a"),
task_nm: 'интеграция проектов 1 и 2',
is_eq: false }
{ max_end: 2022-05-31T00:00:00.000Z,
_id: ObjectId("6229f5bad35e8755fcf68e3b"),
task_nm: 'полная интеграция проектов 2 и 3',
is_eq: true }
{ max_end: 2022-05-31T00:00:00.000Z,
_id: ObjectId("6229f718d35e8755fcf68e3c"),
task_nm: 'работа с бд',
is_eq: false }
15.
Задача с самым поздним сроком окончанияdb.tasks.aggregate([
{$project:{"_id":1,"task_name":1,"ended":1}
},
{$group:{
_id:null,
max_end: { $max: "$ended" },
"task_data": { "$push": "$$ROOT" }
}
},
{ $unwind : "$task_data" },
{
$project:{"_id":"$task_data._id","task_nm":"$task_data.task_name","num":"$task_data.num_proj",max_end:1
,"is_eq":{$eq:["$task_data.ended","$max_end"]}}
},
{$match:{"is_eq":true}}
])
16.
Задача с самым поздним срокомокончания
{ max_end: 2022-05-31T00:00:00.000Z,
_id: ObjectId("6229f5bad35e8755fcf68e3b"),
task_nm: 'полная интеграция проектов 2 и 3',
is_eq: true }
17.
Проект с самым большим количествомзадач
18.
Получаем количество задач• db.projects.aggregate([
• {$project:{"_id":1,"name":1,"num_task":{$size:"$pr_tasks"}}
•}
• ])
19.
Получаем количество задач{ _id: ObjectId("622a0482d35e8755fcf68e40"),
name: 'my_project_1',
num_task: 3 }
{ _id: ObjectId("622a0482d35e8755fcf68e41"),
name: 'my_project_2',
num_task: 2 }
{ _id: ObjectId("622a0482d35e8755fcf68e42"),
name: 'my_project_3',
num_task: 1 }
20.
Ищем максимальное количество• db.projects.aggregate([
• {$project:{"_id":1,"name":1,"num_task":{$size:"$pr_tasks"}}
• },
• {$group:{
_id:null,
• max_task_c: { $max: "$num_task" },
• "task_data": { "$push": "$$ROOT" }
• }}
• ])
21.
Ищем максимальное количество{ _id: null,
max_task_c: 3,
task_data:
[ { _id: ObjectId("622a0482d35e8755fcf68e40"),
name: 'my_project_1',
num_task: 3 },
{ _id: ObjectId("622a0482d35e8755fcf68e41"),
name: 'my_project_2',
num_task: 2 },
{ _id: ObjectId("622a0482d35e8755fcf68e42"),
name: 'my_project_3',
num_task: 1 } ] }
22.
Приводим к одному уровню• db.projects.aggregate([
• {$project:{"_id":1,"name":1,"num_task":{$size:"$pr_tasks"}}
• },
• {$group:{
_id:null,
• max_task_c: { $max: "$num_task" },
• "task_data": { "$push": "$$ROOT" }
• }},
• { $unwind : "$task_data" }
• ])
23.
Приводим к одному уровню{ _id: null,
max_task_c: 3,
task_data:
{ _id: ObjectId("622a0482d35e8755fcf68e40"),
name: 'my_project_1',
num_task: 3 } }
{ _id: null,
max_task_c: 3,
task_data:
{ _id: ObjectId("622a0482d35e8755fcf68e41"),
name: 'my_project_2',
num_task: 2 } }
{ _id: null,
max_task_c: 3,
task_data:
{ _id: ObjectId("622a0482d35e8755fcf68e42"),
name: 'my_project_3',
num_task: 1 } }
24.
Создаем поле с равенствомdb.projects.aggregate([
{$project:{"_id":1,"name":1,"num_task":{$size:"$pr_tasks"}}
},
{$group:{
_id:null,
max_task_c: { $max: "$num_task" },
"task_data": { "$push": "$$ROOT" }
}},
{ $unwind : "$task_data" },
{
$project:{"_id":"$task_data._id","project_nm":"$task_data.name","num_task1":"$task_data.num_task",max_t
ask_c:1 ,"is_eq":{$eq:["$task_data.num_task","$max_task_c"]}}
}
])
25.
Создаем поле с равенством{ max_task_c: 3,
_id: ObjectId("622a0482d35e8755fcf68e40"),
project_nm: 'my_project_1',
num_task1: 3,
is_eq: true }
{ max_task_c: 3,
_id: ObjectId("622a0482d35e8755fcf68e41"),
project_nm: 'my_project_2',
num_task1: 2,
is_eq: false }
{ max_task_c: 3,
_id: ObjectId("622a0482d35e8755fcf68e42"),
project_nm: 'my_project_3',
num_task1: 1,
is_eq: false }
26.
Проект с самым большим количествомзадач
db.projects.aggregate([
{$project:{"_id":1,"name":1,"num_task":{$size:"$pr_tasks"}}
},
{$group:{
_id:null,
max_task_c: { $max: "$num_task" },
"task_data": { "$push": "$$ROOT" }
}},
{ $unwind : "$task_data" },
{
$project:{"_id":"$task_data._id","project_nm":"$task_data.name","num_task1":"$task_data.num_task",max_task_c:1
,"is_eq":{$eq:["$task_data.num_task","$max_task_c"]}}
},
{$match:{"is_eq":true}}
])
27.
Проект с самым большим количествомзадач
{ max_task_c: 3,
_id: ObjectId("622a0482d35e8755fcf68e40"),
project_nm: 'my_project_1',
num_task1: 3,
is_eq: true }
28.
Человек, у которого нет незавершенныхзадач
• По шагам
1. Основа- человек
2. Присоединить задачи
3. Оставить в объекте, полученном присоединением только
незавершенные задачи
4. Создать поле с количеством незавершенных задач
5. Условие на поле с количеством незавершенных задач на равенство 0
29.
Шаги 1, 2 (Присоединить задачи к человеку)db.employees.aggregate([
{ $lookup:
{ from: "tasks",
localField: "tasks",
foreignField: "_id",
as: "unended_tasks" } }
])
30.
Шаги 1, 2 (Присоединить задачи кчеловеку)
{ _id: ObjectId("622b1b70856d7b828d8203d0"),
surname: 'Иванов',
name: 'Иван',
patronym: 'Иванович',
tasks:
[ ObjectId("6229f5bad35e8755fcf68e3a"),
ObjectId("6229f5b9d35e8755fcf68e39") ],
unended_tasks:
[ { _id: ObjectId("6229f5b9d35e8755fcf68e39"),
task_name: 'пользовательский интерфейс',
created: 'Thu Mar 10 2022 15:57:29 GMT+0300 (Москва,
стандартное время)',
started: 2022-03-24T00:00:00.000Z,
ended: 2022-04-24T00:00:00.000Z,
is_done: false },
{ _id: ObjectId("6229f5bad35e8755fcf68e3a"),
task_name: 'интеграция проектов 1 и 2',
created: 'Thu Mar 10 2022 15:57:30 GMT+0300 (Москва,
стандартное время)',
started: 2022-03-24T00:00:00.000Z,
ended: 2022-04-24T00:00:00.000Z,
is_done: true } ] }
{ _id: ObjectId("622b1b70856d7b828d8203d1"),
surname: 'Петров',
name: 'Петр',
patronym: 'Петрович',
tasks: [ ObjectId("6229f5b9d35e8755fcf68e39") ],
unended_tasks:
[ { _id: ObjectId("6229f5b9d35e8755fcf68e39"),
task_name: 'пользовательский интерфейс',
created: 'Thu Mar 10 2022 15:57:29 GMT+0300 (Москва,
стандартное время)',
started: 2022-03-24T00:00:00.000Z,
ended: 2022-04-24T00:00:00.000Z,
is_done: false } ] }
31.
Шаги 1, 2 (Присоединить задачи к человеку){ _id: ObjectId("622b1b70856d7b828d8203d2"),
surname: 'Иванова',
name: 'Анна',
patronym: 'Петровна',
tasks:
[ ObjectId("6229f5b9d35e8755fcf68e39"),
ObjectId("6229f5bad35e8755fcf68e3b") ],
unended_tasks:
[ { _id: ObjectId("6229f5b9d35e8755fcf68e39"),
task_name: 'пользовательский интерфейс',
created: 'Thu Mar 10 2022 15:57:29 GMT+0300
(Москва, стандартное время)',
started: 2022-03-24T00:00:00.000Z,
ended: 2022-04-24T00:00:00.000Z,
is_done: false },
{ _id: ObjectId("6229f5bad35e8755fcf68e3b"),
task_name: 'полная интеграция проектов 2 и 3',
created: 'Thu Mar 10 2022 15:57:30 GMT+0300
(Москва, стандартное время)',
started: 2022-05-24T00:00:00.000Z,
ended: 2022-05-31T00:00:00.000Z,
is_done: false } ] }
{ _id: ObjectId("622b1b70856d7b828d8203d3"),
surname: 'Менделеева',
name: 'Любовь',
patronym: 'Дмитриевна',
tasks: [ ObjectId("6229f5bad35e8755fcf68e3a") ],
unended_tasks:
[ { _id: ObjectId("6229f5bad35e8755fcf68e3a"),
task_name: 'интеграция проектов 1 и 2',
created: 'Thu Mar 10 2022 15:57:30 GMT+0300 (Москва,
стандартное время)',
started: 2022-03-24T00:00:00.000Z,
ended: 2022-04-24T00:00:00.000Z,
is_done: true } ] }
32.
Шаг 3 Оставить в объекте, полученном присоединением тольконезавершенные задачи
db.employees.aggregate([
{ $lookup:
{
from: "tasks",
localField: "tasks",
foreignField: "_id",
as: "unended_tasks"
}
},
{$project:{"_id":1,"surname":1,"name":1,"patronym":1,"unended_tasks":
{ $filter:
{input:"$unended_tasks",as: "tsk",
cond:{$eq:["$$tsk.is_done",false]}
}
}
},
]
)
}
33.
Шаг 3 Оставить в объекте, полученном присоединением тольконезавершенные задачи
{ _id: ObjectId("622b1b70856d7b828d8203d0"),
surname: 'Иванов',
name: 'Иван',
patronym: 'Иванович',
unended_tasks:
[ { _id: ObjectId("6229f5b9d35e8755fcf68e39"),
task_name: 'пользовательский интерфейс',
created: 'Thu Mar 10 2022 15:57:29 GMT+0300 (Москва,
стандартное время)',
started: 2022-03-24T00:00:00.000Z,
ended: 2022-04-24T00:00:00.000Z,
is_done: false } ] }
{ _id: ObjectId("622b1b70856d7b828d8203d1"),
surname: 'Петров',
name: 'Петр',
patronym: 'Петрович',
unended_tasks:
[ { _id: ObjectId("6229f5b9d35e8755fcf68e39"),
task_name: 'пользовательский интерфейс',
created: 'Thu Mar 10 2022 15:57:29 GMT+0300 (Москва,
стандартное время)',
started: 2022-03-24T00:00:00.000Z,
ended: 2022-04-24T00:00:00.000Z,
is_done: false } ] }
34.
Шаг 3 Оставить в объекте, полученном присоединением тольконезавершенные задачи
{ _id: ObjectId("622b1b70856d7b828d8203d2"),
surname: 'Иванова',
name: 'Анна',
patronym: 'Петровна',
unended_tasks:
[ { _id: ObjectId("6229f5b9d35e8755fcf68e39"),
task_name: 'пользовательский интерфейс',
created: 'Thu Mar 10 2022 15:57:29 GMT+0300 (Москва,
стандартное время)',
started: 2022-03-24T00:00:00.000Z,
ended: 2022-04-24T00:00:00.000Z,
is_done: false },
{ _id: ObjectId("6229f5bad35e8755fcf68e3b"),
task_name: 'полная интеграция проектов 2 и 3',
created: 'Thu Mar 10 2022 15:57:30 GMT+0300 (Москва,
стандартное время)',
started: 2022-05-24T00:00:00.000Z,
ended: 2022-05-31T00:00:00.000Z,
is_done: false } ] }
{ _id: ObjectId("622b1b70856d7b828d8203d3"),
surname: 'Менделеева',
name: 'Любовь',
patronym: 'Дмитриевна',
unended_tasks: [] }
35.
Шаг 4. Создать поле с количеством незавершенных задачdb.employees.aggregate([
{ $lookup:
{
from: "tasks",
localField: "tasks",
foreignField: "_id",
as: "unended_tasks"
}
},
{$project:{"_id":1,"surname":1,"name":1,"patronym":1,"unended_tasks":
{ $filter:{input:"$unended_tasks",as: "tsk",cond:{$eq:["$$tsk.is_done",false]}}}
}
},
{$addFields:{"cnt_not_done":{$size:"$unended_tasks"}}},
]
)
36.
Шаг 4. Создать поле с количествомнезавершенных задач
{ _id: ObjectId("622b1b70856d7b828d8203d0"),
surname: 'Иванов',
name: 'Иван',
patronym: 'Иванович',
unended_tasks:
[ { _id: ObjectId("6229f5b9d35e8755fcf68e39"),
task_name: 'пользовательский интерфейс',
created: 'Thu Mar 10 2022 15:57:29 GMT+0300 (Москва,
стандартное время)',
started: 2022-03-24T00:00:00.000Z,
ended: 2022-04-24T00:00:00.000Z,
is_done: false } ],
cnt_not_done: 1 }
{ _id: ObjectId("622b1b70856d7b828d8203d1"),
surname: 'Петров',
name: 'Петр',
patronym: 'Петрович',
unended_tasks:
[ { _id: ObjectId("6229f5b9d35e8755fcf68e39"),
task_name: 'пользовательский интерфейс',
created: 'Thu Mar 10 2022 15:57:29 GMT+0300 (Москва,
стандартное время)',
started: 2022-03-24T00:00:00.000Z,
ended: 2022-04-24T00:00:00.000Z,
is_done: false } ],
cnt_not_done: 1 }
37.
Шаг 4. Создать поле с количеством незавершенных задач{ _id: ObjectId("622b1b70856d7b828d8203d2"),
surname: 'Иванова',
name: 'Анна',
patronym: 'Петровна',
unended_tasks:
[ { _id: ObjectId("6229f5b9d35e8755fcf68e39"),
task_name: 'пользовательский интерфейс',
created: 'Thu Mar 10 2022 15:57:29 GMT+0300 (Москва,
стандартное время)',
started: 2022-03-24T00:00:00.000Z,
ended: 2022-04-24T00:00:00.000Z,
is_done: false },
{ _id: ObjectId("6229f5bad35e8755fcf68e3b"),
task_name: 'полная интеграция проектов 2 и 3',
created: 'Thu Mar 10 2022 15:57:30 GMT+0300 (Москва,
стандартное время)',
started: 2022-05-24T00:00:00.000Z,
ended: 2022-05-31T00:00:00.000Z,
is_done: false } ],
cnt_not_done: 2 }
{ _id: ObjectId("622b1b70856d7b828d8203d3"),
surname: 'Менделеева',
name: 'Любовь',
patronym: 'Дмитриевна',
unended_tasks: [],
cnt_not_done: 0 }
38.
Условие на поле с количествомнезавершенных задач на равенство
• {$match:{"cnt_not_done":0}}
39.
Человек, у которого нет незавершенных задачdb.employees.aggregate([
{ $lookup:
{
from: "tasks",
localField: "tasks",
foreignField: "_id",
as: "unended_tasks"
}
},
{$project:{"_id":1,"surname":1,"name":1,"patronym":1,"unended_tasks":
{ $filter:{input:"$unended_tasks",as: "tsk",cond:{$eq:["$$tsk.is_done",false]}}}
}
},
{$addFields:{"cnt_not_done":{$size:"$unended_tasks"}}},
{$match:{"cnt_not_done":0}}
]
)
40.
Человек, у которого нет незавершенных задачdb.employees.aggregate([
{ $lookup:
{
from: "tasks",
localField: "tasks",
foreignField: "_id",
as: "unended_tasks"
} },
{$project:{"_id":1,"surname":1,"name":1,"patronym":1,"unended_tasks":
{ $filter:{input:"$unended_tasks",as: "tsk",cond:{$eq:["$$tsk.is_done",false]}}}
}},
{$addFields:{"cnt_not_done":{$size:"$unended_tasks"}}},
{$match:{"cnt_not_done":0}} ] )
{ _id: ObjectId("622b1b70856d7b828d8203d3"),
surname: 'Менделеева',
name: 'Любовь',
patronym: 'Дмитриевна',
unended_tasks: [],
cnt_not_done: 0 }