Ссылки на документы между 2 коллекциями MongoDB

Я создаю приложение, в котором сотрудники могут быть добавлены в базу данных, и каждый сотрудник принадлежит определенной компании, которую можно выбрать в поле выбора в форме. Форма для добавления сотрудников также содержит поле окладов, и я хотел бы иметь возможность отображать компании с их общими расходами на оклады (на основе суммы окладов своих сотрудников).

Сначала я предполагал, что буду использовать одну коллекцию "сотрудников". Затем, например, выберите "Apple" в качестве компании, и, наконец, в итоге я получу список объектов сотрудников, в котором я могу просмотреть всех сотрудников, где "Apple" была компания, и суммировать всю зарплату. поля. Это оказалось плохим подходом. Далее я решил создать отдельную коллекцию "компаний". Затем, прежде чем сохранить сотрудника, я проверяю идентификатор объекта компании и сохраняю его как компанию.

Например,

{ firstName: "Bob", lastName, "Smith", company: "5b62a456e7179a07334478a5", salary: 7}

куда "5b62a456e7179a07334478a5" это поле "_id" Apple. Как мне продолжить определять эти отношения в MongoDB?

Добавляю ли я поле сотрудников для каждой компании и пытаюсь сохранить каждого сотрудника в компании после сохранения их в коллекции сотрудников? Таким образом, я могу попытаться получить доступ к сумме всех сотрудников в каждой компании, чтобы получить общую сумму заработной платы.

Но тогда мне придется писать в две разные коллекции каждый раз, когда новый сотрудник сохраняется. Кроме того, как бы выглядел этот поток? Мне нужно использовать поле company _id, чтобы найти компанию, а затем сохранить сотрудника в компании. Итак, должен ли я выполнить запрос и две записи на каждого нового сотрудника?

1 ответ

Вы можете использовать функцию поиска, чтобы сделать "присоединение"

db.table1.aggregate([{
    $lookup: {
        from: "table2",
        localField: "table2column",
        foreignField: "table1key",
        as: "alias"
    },
    {   
        $project:{
           //columns you want
        } 
    }
}])

При этом... если ваши данные являются реляционными, а не чрезмерно огромными, то реляционная база данных может быть лучшим выбором.

Другие вопросы по тегам