Link 具有 'hasMany' 的模型到具有数组的模型

Link a model with 'hasMany' to a model with an array

我有 2 个简单模型:

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

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

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

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

所以我可以 link 将 Person 模型转换为 Jobs 模型,并简单地获得所有人员的工作。

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

您可以使用以下聚合管道来 $lookup 作业收集和 return 匹配作业

在 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()