将具有“ hasMany”的模型链接到具有数组的模型

时间:2019-01-14 16:23:33

标签: mongodb loopback

我有2个简单的模型:

    Person:
     - id: "1234"
     - name: "John"

    Jobs:
     - title: "Programmer"
     - personList:[{
         - personId: "1234"
         - personName: "John"
       },
       {
         ... another person
       }]

简而言之,我想运行以下简单查询:

    http://example.com/person?filter={"include":"jobs"}

因此,我可以将人员模型链接到工作模型,并轻松地获得所有人员工作。

通常,您可以使用hasMany关系来实现这一点,但是如果它具有对象数组,如何实现呢?

1 个答案:

答案 0 :(得分:1)

您可以使用下面的聚合管道来$lookup收集作业并返回匹配的作业

在mongo 3.6及更高版本中

db.person.aggregate([
    {$lookup : {
        from : "jobs", 
        let : {"personId" : "$id"}, 
        pipeline : [
            {$match : {"$expr" : {$in : ["$$personId", "$personList.personId"]}}},
            {$addFields : {personList : {$filter : {input : "$personList", as : "p", cond : {$eq : ["$$personId", "$$p.personId"]}}}}}
        ],
        as : "jobs"
    }}
]).pretty()