在2个MongoDB集合之间引用文档

时间:2018-08-03 15:15:00

标签: node.js angular mongodb one-to-many

我正在构建一个应用程序,可以在其中将员工添加到数据库中,并且每个员工都属于一个特定的公司,可以从表单上的选择字段中进行选择。添加员工的表单中还包含一个薪金字段,我希望能够显示公司及其薪金总额(基于其员工的薪金总额)。

起初,我以为我会使用一个“员工”集合。然后,例如,选择“ Apple”作为公司,最后,最后得到一个员工对象列表,在其中可以遍历“ Apple”是公司的所有员工并汇总所有薪水领域。最终这是一个糟糕的方法。接下来,我决定创建一个单独的“公司”集合。然后,在保存员工之前,我先查找公司对象ID,然后将其另存为公司。

例如,

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

"5b62a456e7179a07334478a5"是Apple的“ _id”字段。 如何继续在MongoDB中定义此关系?

我是否将雇员字段添加到每个公司,并在将每个雇员保存到雇员集合后尝试将其保存到公司?这样,我可以尝试访问每个公司内所有雇员的总和,以获得总薪金费用。

但是,每次保存新员工时,我将不得不写两个不同的集合。另外,它的流程会是什么样子?我需要使用company _id字段来查找公司,然后将员工保存到公司中。因此,我是否必须对每个新员工执行一次查询并执行两次写入操作?

1 个答案:

答案 0 :(得分:0)

您可以使用查找功能进行“加入”

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

话虽这么说...如果您的数据是关系数据而不是巨大的数据,那么关系数据库可能是一个更好的选择。