문서 메뉴
문서 홈
/
MongoDB Atlas
/ / /

$lookup

이 페이지의 내용

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

The MongoDB server $lookup performs a left outer join of one unsharded collection to another unsharded collection in the same database. Lookups are useful as they allow you to filter in documents from the "joined" collection for processing.

연합 데이터베이스 인스턴스에서는 $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 →