我有一个关于如何聚合猫鼬深度集合的问题,例如我有 3 个集合:
[
{
"id": 122,
"name": "Administration",
},
{
"id": 133,
"name": "IT/Computer"
}
]
[
{
"id": 1,
"name": "Manager",
"id_specialization": 122
},
{
"id": 2,
"name": "Front End Developer",
"id_specialization": 133
}
]
[
{
"id": 1,
"id_job_position": "1",
"location": "New York"
},
{
"id": 2,
"id_job_position": "2",
"location": "Dallas"
}
]
我想通过“专业化”进行过滤,如果我选择专业化的“122”ID,那么我想显示职位数据是该专业化的职位。
[
{
"id": 1,
"id_job_position": "1",
"location": "New York"
}
]
之前谢谢。
答案 0 :(得分:1)
演示 - https://mongoplayground.net/p/1Bn1OUOODrT
使用$lookup
<块引用>对同一数据库中的未分片集合执行左外部联接,以从“联接”集合中过滤文档以进行处理。对于每个输入文档,$lookup 阶段添加一个新的数组字段,其元素是“joined”集合中的匹配文档。 $lookup 阶段将这些重构的文档传递到下一阶段。
db.jobPosition.aggregate([
{
$match: {
id_specialization: 122
}
},
{
"$lookup": {
"from": "job",
"localField": "id",
"foreignField": "id_job_position",
"as": "jobs"
}
},
{
$project: {
jobs: 1
}
},
{
$unwind: "$jobs" // break into individual documents can skip if only 1 document will come from lookup
},
{
"$replaceRoot": {
"newRoot": "$jobs"
}
},
{
$project: { _id: 0 }
}
])
如果只有 1 个文档来自查找
演示 - https://mongoplayground.net/p/CNevmFlEWWZ
db.jobPosition.aggregate([
{
$match: {
id_specialization: 122
}
},
{
"$lookup": {
"from": "job",
"localField": "id",
"foreignField": "id_job_position",
"as": "jobs"
}
},
{
"$replaceRoot": {
"newRoot": {
"$first": "$jobs"
}
}
},
{
"$project": {
_id: 0
}
}
])