Person:
- id: "1234"
- name: "John"
Jobs:
- title: "Programmer"
- personList:[{
- personId: "1234"
- personName: "John"
},
{
... another person
}]
简而言之,我想运行以下简单查询:
http://example.com/person?filter={"include":"jobs"}
因此,我可以将人员模型链接到工作模型,并轻松地获得所有人员工作。
通常,您可以使用hasMany关系来实现这一点,但是如果它具有对象数组,如何实现呢?
答案 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()