Я довольно новичок в MongoDB и при подготовке данных для использования я попал в Агрегацию ... какая мощная маленькая вещь, которая есть в этой базе данных!Я был очень взволнован и начал тестировать некоторые вещи :)
Я экономлю записи времени для companyId и employeeId ... которые могут иметь много записей ... которые обычно сортируются по дате, но по одной датеможет иметь несколько записей (несколько регистраций в один и тот же день)
Я пытаюсь придумать хорошую схему, чтобы я мог легко получить свои данные именно так, как мне нужно, и как новичок, я бы лучше попросилруководство и проверь, нахожусь ли я на правильном пути
мой вывод должен выглядеть как
[{
"company": "474A5D39-C87F-440C-BE99-D441371BF88C",
"employee": "BA75621E-5D46-4487-8C9F-C0CE0B2A7DE2",
"name": "Bruno Alexandre":
"registrations": [{
"id": 1448364,
"spanned": false,
"spannedDay": 0,
"date": "2019-01-17",
"timeStart": "09:00:00",
"timeEnd": "12:00:00",
"amount": {
"days": 0.4,
"hours": 2,
"km": null,
"unit": "days and hours",
"normHours": 5
},
"dateDetails": {
"week": 3,
"weekDay": 4,
"weekDayEnglish": "Thursday",
"holiday": false
},
"jobCode": {
"id": null,
"isPayroll": true,
"isFlex": false
},
"payroll": {
"guid": null
},
"type": "Sick",
"subType": "Sick",
"status": "APP",
"reason": "IS",
"group": "LeaveAndAbsence",
"note": null,
"createdTimeStamp": "2019-01-17T15:53:55.423Z"
}, /* more date entries */ ]
}, /* other employees */ ]
, как лучше всего добавить данные в коллекцию?
Является ли это более эффективным , если я создаю документ для компании / сотрудника и добавляю все регистрационные записи в этом документе (со временем он может стать действительно большим) ... или лучшеиметь один документ на компанию / сотрудника / дату и вместо этого добавлять все ежедневные события в этот документ?
относительно агрегации, я все еще новичок во всем этом, но мне кажется, что яможно просто позвонить
RegistrationsModel.aggregate([
{
$match: {
date: { $gte: new Date('2019-01-01'), $lte: new Date('2019-01-31') },
company: '474A5D39-C87F-440C-BE99-D441371BF88C'
}
},
{
$group: {
_id: '$employee',
name: { '$first': '$name' }
}
},
{
// ... get all registrations as an Array ...
},
{
$sort: {
'registrations.date': -1
}
}
]);
PS Я взял курс агрегации 1024 *, чтобы начать знакомство со всем этим