from: "teams",
//
第二张表teams
let: {
name:
"$name"
//
前为第一张表的name字段,后为传到pipline中进行聚合连接的字段,相当于实参和形参
pipeline: [
$match: {
$expr: {
$eq: [
//
$xepr+$eq:传入的两个字段,前者为第二张表的name字段,后者为上面的$name字段即第一张表的
"$name"
,
"$$name"
$lookup: {
from:
"players"
,
let: {
players:
"$players"
//
将第二张表的players以$players名传入pipline
pipeline: [
$match: {
$expr: {
$in: [
"$_id",
//
获得第三章表的_id字段在$players中的结果
"$$players"
$lookup: {
//
第三层嵌套为普通的lookup
from: "countries"
,
localField:
"nationality"
,
foreignField:
"_id"
,
as:
"nationality"
as:
"players"
//
第二层嵌套中第二张表接收第三张表查询结果的字段
as: "teams"
//
第一层嵌套中主表接收第二张表的字段,存在则覆盖,不存在则增加