首页 > 解决方案 > 将带有“hasMany”的模型链接到带有数组的模型

问题描述

我有 2 个简单的模型:

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

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

简而言之,我想运行这个简单的查询:

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

因此,我可以将Person模型链接到Jobs模型,并且也可以简单地获取所有人员工作。

通常,您会使用 hasMany 关系来做到这一点,但是如果它是一个对象数组,如何实现呢?

标签: mongodbloopback

解决方案


您可以使用以下聚合管道来$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()

推荐阅读