문서 메뉴
문서 홈
/
MongoDB 아틀라스
/ /

$lookup

이 페이지의 내용

  • 정의
  • 구문
  • 행동

$lookup$source 에서 연결 레지스트리의 Atlas 컬렉션으로 메시지 스트림의 왼쪽 외부 조인을 수행합니다.

사용 사례에 따라 $lookup 파이프라인 단계는 다음 세 가지 구문 중 하나를 사용합니다.

자세히 알아보려면 $lookup 구문을 참조하세요.

경고

$lookup을 사용하여 스트림을 보강하면 스트림 처리 속도가 느려질 수 있습니다.

다음 프로토타입 양식은 사용 가능한 모든 필드를 보여 줍니다.

{
"$lookup": {
"from": {
"connectionName": "<registered-atlas-connection>",
"db": "<registered-database-name>",
"coll": "<atlas-collection-name>"
},
"localField": "<field-in-source-messages>",
"foreignField": "<field-in-from-collection>",
"let": {
<var_1>: <expression>,
<var_2>: <expression>,
,
<var_n>: <expression>
},
"pipeline": [
<pipeline to run>
],
"as": "<output-array-field>"
}
}

$lookup 단계에서는 다음 필드가 있는 문서를 사용합니다.

필드
유형
필요성
설명
FROM
문서
필수 사항
$source 의 메시지에 결합할 Atlas 데이터베이스의 컬렉션을 지정하는 문서입니다. 연결 레지스트리에서 컬렉션을 지정해야 합니다. 이 문서의 모든 필드에 값을 지정해야 합니다.
from.connectionName
문자열
필수 사항
연결 레지스트리의 연결 이름입니다.
from.db
문자열
필수 사항
참여하려는 컬렉션이 포함된 Atlas 데이터베이스의 이름입니다.
from.coll
문자열
필수 사항
가입하려는 컬렉션의 이름입니다.
localField
문자열
조건부

참여할 $source 메시지의 입력란입니다.

이 필드는 다음 구문의 일부입니다.

foreignField
문자열
조건부

조인할 from 컬렉션에 있는 문서의 필드입니다.

이 필드는 다음 구문의 일부입니다.

하자
문서
조건부

파이프라인 단계에서 사용할 변수를 지정합니다. 자세히 알아보려면 let을 참조하세요.

이 필드는 다음 구문의 일부입니다.

파이프라인
문서
조건부

조인된 컬렉션에서 실행할 pipeline을 지정합니다. 자세한 내용은 파이프라인을 참조하세요.

이 필드는 다음 구문의 일부입니다.

방식
문자열
필수 사항
입력 문서에 추가할 새 배열 필드의 이름입니다. 새 배열 필드에는 from 컬렉션에서 매칭되는 문서가 포함됩니다. 지정한 이름이 입력 문서에 이미 필드로 존재하는 경우 기존 필드를 덮어씁니다.

Atlas Stream Processing 버전의 $lookup$source 의 메시지와 지정된 Atlas collection의 문서를 왼쪽 외부 조인을 수행합니다. 이 버전은 표준 MongoDB 데이터베이스에서 사용할 수 있는 $lookup 단계와 유사하게 작동합니다. 그러나 이 버전에서는 연결 레지스트리 의 Atlas 컬렉션을 from 필드의 값으로 지정해야 합니다.

파이프라인에는 중첩된 $lookup 단계가 포함될 수 있습니다. 파이프라인에 중첩된 $lookup 단계를 포함하는 경우, 표준 from 구문을 사용하여 외부 $lookup 단계와 동일한 원격 Atlas 연결에 컬렉션을 지정해야 합니다.

예제

$lookup : {
from: {connectionName: "dbsrv1", db: "db1", coll: "coll1"},
,
pipeline: [
,
{
$lookup: {
from: "coll2",
,
}
},
,
]
}

파이프라인의 동일한 컬렉션에 $lookup$merge 가 모두 있는 경우 증분 보기를 유지하려고 하면 Atlas Stream Processing 결과가 다를 수 있습니다. Atlas Stream Processing은 여러 소스 메시지를 동시에 처리한 다음 이를 모두 병합합니다. $lookup$merge 모두 사용하는 동일한 ID를 가진 메시지가 여러 개 있는 경우 Atlas Stream Processing에서 아직 구체화되지 않은 결과를 반환할 수 있습니다.

예제

다음 입력 스트림을 고려하세요.

{ _id: 1, count: 2 }
{ _id: 1, count: 3 }

파이프라인 내부에 다음과 같은 쿼리가 포함되어 있다고 가정해 보겠습니다.

{
...,
pipeline: [
{ $lookup on _id == foreignDoc._id from collection A }
{ $project: { _id: 1, count: $count + $foreignDoc.count } }
{ $merge: { into collection A } }
]
}

증분 보기를 유지하려는 경우 다음과 유사한 결과를 예상할 수 있습니다.

{ _id: 1, count: 5 }

하지만 Atlas Stream Processing은 Atlas Stream Processing이 문서를 처리했는지 여부에 따라 5 또는 3을 반환할 수 있습니다.

자세한 내용은 $lookup을 참조하세요.

← $validate

이 페이지의 내용