조인을 수행할 동일한 데이터베이스의 컬렉션
Input 도큐먼트의 localField와 from에 지정한 컬렉션의 foreignField에 대해 동등성 매치를 수행한다.
Input 도큐먼트에 더하는 새로운 배열 필드의 이름. 새로운 배열 필드는 from 컬렉션의 매칭되는 도큐먼트를 포함한다.
SELECT *, (
SELECT ARRAY_AGG(*)
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
) AS <output array field>
FROM collection;
조인된 컬렉션에서 상관된 하위 쿼리 > pipeline
{
$lookup:
{
from: <joined collection>,
let: { <var_1>: <expression>, …, <var_n>: <expression> },
pipeline: [ <pipeline to run on joined collection> ],
as: <output array field>
}
}
pipeline 단계에서 사용할 변수들을 명시한다. 조인된 컬렉션의 도큐먼트의 필드에 접근하기 위한 변수 표현식을 사용한다.
”$$<variable>” 문법으로 pipeline 단계에 사용할 변수를 참조한다.
$match: 변수에 접근하기 위해 $expr 연산자가 필요하다. $expr 연산자는 표현식의 집합체를 사용할 수 있게 해준다. $eq, $lt, $lte, $gt, $gte 비교 연산자가 $expr 연산자 안에서 사용 가능하다.조인된 컬렉션에서 결과 도큐먼트를 결정한다. 모든 도큐먼트를 리턴할 경우에는 빈 pipeline을 명시하면 된다.
Beanie는 링크된 모든 도큐먼트를 fetch하기 위해 하나의 집계 쿼리를 사용한다.
fetch_links 파라미터가 True라면, 연결된 도큐먼트 필드로 검색할 수 있다.
BackLink는 보통의 Links의 동작을 모두 지원하지만, 가상의 필드이다.
Beanie는 이 필드를 데이터베이스에 저장하지 않고 fetch_links=True가 있는 항목을 가져온다.
Link가 필드에 다른 도큐먼트를 포함할 수 있는 기능이라면,
BackLink는 반대로 자신을 Link로 포함하고 있는 도큐먼트를 가져올 수 있는 가상의 필드라고 보면 될 것 같다 ...