문서 메뉴

문서 홈MongoDB 실행 및 관리MongoDB Atlas

$lookup

이 페이지의 내용

  • 구문
  • from 필드 객체
  • 예제
  • 기본 예시
  • 중첩된 예제

MongoDB 서버 $lookup 은 동일한 데이터베이스의 비샤드형 컬렉션 한 개를 다른 비샤드형 컬렉션에 왼쪽 외부 조인을 수행합니다. 조회를 사용하면 "조인된" 컬렉션의 문서를 필터링하여 처리할 수 있으므로 유용합니다.

연합 데이터베이스 인스턴스에서는 $lookup 를 사용하여 동일한 데이터베이스 또는 Atlas, Amazon Web Services S3, HTTP 또는 HTTPS 데이터 저장소의 다른 데이터베이스에서 샤딩된 컬렉션과 샤딩되지 않은 컬렉션을 조인할 수 있습니다.

참고

샤드 컬렉션의 경우 $lookup 는 MongoDB 5 를 실행하는 Atlas 클러스터에서만 사용할 수 있습니다.1 이상.

$lookup 구문 은 MongoDB 서버 매뉴얼에 설명되어 있습니다.

Data Federation에서 $lookupfrom 필드에는 다음과 같은 대체 구문이 있습니다. 이를 통해 선택적 데이터베이스 이름과 필수 collection 이름을 포함하는 객체를 지정할 수 있습니다.

필드
유형
설명
필요성
db
문자열

데이터베이스 이름입니다.

데이터베이스 이름을 지정하면 Data Federation은 지정된 데이터베이스의 컬렉션에서 데이터를 읽습니다. 명령이 실행 중인 데이터베이스와 다른 데이터베이스 이름을 지정하는 경우 중첩된 모든 $lookup 단계에서도 이 데이터베이스 이름을 지정 해야 합니다 .

$lookup 단계에서 데이터베이스 이름을 지정하지 않으면 해당 단계의 컬렉션은 가장 가까운 상위 $lookup 단계에 지정된 데이터베이스 이름(있는 경우) 또는 명령이 실행 중인 데이터베이스의 이름을 상속합니다.

조건부
coll
문자열
컬렉션 이름입니다.
필수 사항

다음 collection을 포함하는 sourceDB1, sourceDB2sourceDB3 라는 세 개의 데이터베이스가 있다고 가정해 보겠습니다.

다음 예제에서는 $lookup 애그리게이션 단계를 사용하여 한 컬렉션의 문서를 다른 데이터베이스의 컬렉션의 문서와 결합합니다.

sourceDB1.orders 컬렉션에 대한 다음 애그리게이션 작업은 orders 컬렉션의 item 필드와 컬렉션의 sku 필드를 사용하여 orders 컬렉션의 문서를 sourceDB2.catalog 컬렉션의 문서와 조인합니다. catalog 컬렉션:

db.getSiblingDb("sourceDB1").orders.aggregate(
{
$lookup: {
from: { db: "sourceDB2", coll: "catalog" },
localField: "item",
foreignField: "sku",
as: "inventory_docs"
}
}
)

sourceDB1.orders 컬렉션에 대한 다음 애그리게이션 작업은 orders 컬렉션의 item 필드를 사용하여 orders 컬렉션의 문서를 sourceDB2.catalog 컬렉션 및 sourceDB3.warehouses 컬렉션의 문서와 조인합니다. catalog 컬렉션의 sku 필드와 warehouses 컬렉션의 stock_iteminstock 필드:

db.getSiblingDb("sourceDB1").orders.aggregate(
[
{
$lookup: {
from: db: "sourceDB2", coll: "catalog",
let: { "order_sku": "$item" },
pipeline: [
{
$match: {
$expr: {
$eq: ["$sku", "$$order_sku"]
}
}
},
{
$lookup: {
from: db: "sourceDB3", coll: "warehouses",
pipeline: [
{
$match: {
$expr:{
$eq : ["$stock_item", "$$order_sku"]
}
}
},
{
$project : { "instock": 1, "_id": 0}
}
],
as: "wh"
}
},
{ "$unwind": "$wh" },
{
$project : { "description": 1, "instock": "$wh.instock", "_id": 0}
}
],
as: "inventory"
},
},
]
)
← $collStats
$merge →