Ссылки на документы между 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
}
}
}])
При этом... если ваши данные являются реляционными, а не чрезмерно огромными, то реляционная база данных может быть лучшим выбором.