Настройка и агрегирование документов MongoDB - PullRequest
0 голосов
/ 27 сентября 2019

Я довольно новичок в 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 *, чтобы начать знакомство со всем этим

1 Ответ

0 голосов
/ 27 сентября 2019

Является ли это более эффективным, если я создаю документ для каждой компании / сотрудника и добавляю все регистрационные записи в этот документ (со временем он может стать действительно большим) ... или лучше иметь один документ на компанию/ employee / date и добавить все ежедневные события в этот документ вместо этого?

Исходя из того, что я понимаю в документно-ориентированных базах данных, я бы сказал, что цель состоит в том, чтобы получить все необходимые данные в определенном контексте., сгруппированных внутри одного документа.Итак, вам нужно определить, какие данные вам понадобятся (приблизиться к функциям, которые вы хотите реализовать), и построить свою структуру данных в соответствии с этим.Обязательно определите будущие функции, потому что чем больше вы будете готовить свою структуру данных, тем меньше будет сложнее масштабировать вашу базу данных в соответствии с вашими потребностями.

Ваш запрос агрегирования выглядит нормально!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...