Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

$lookup 작업 줄이기

이 페이지의 내용

  • 이 작업에 대하여
  • 예시
  • 자세히 알아보기

$lookup 연산자 는 여러 컬렉션의 정보를 단일 문서 로 결합합니다. $lookup 작업은 자주 사용하지 않을 때 유용하지만, 단일 컬렉션 만 쿼리 하는 작업에 비해 속도가 느리고 리소스 집약적일 수 있습니다. $lookup 작업을 자주 사용하는 경우 관련 데이터를 단일 컬렉션 에 저장 하도록 스키마 를 재구성하는 것이 좋습니다. 이렇게 하면 쿼리 성능이 향상되고 운영 비용 이 절감될 수 있습니다.

두 개의 개별 컬렉션이 있는 다음 스키마 를 가정해 보겠습니다: productsorders. 각 주문에는 여러 제품이 포함될 수 있으며, 각 주문의 제품 세부 정보를 추적 하여 빠르게 액세스. 두 개의 개별 컬렉션은 $lookup 작업으로 결합됩니다.

//products collection
db.products.insertMany( [
{
_id: 1,
name: "Laptop",
price: 1000,
manufacturer: "TechCorp",
category: "Electronics",
description: "Fastest computer on the market."
},
{
_id: 2,
name: "Headphones",
price: 100,
manufacturer: "Sound",
category: "Accessories",
description: "The latest sound technology."
},
{
_id: 3,
name: "Tablet",
price: 200,
manufacturer: "TechCorp",
category: "Electronics",
description: "The most compact tablet."
}
] )
//orders collection
db.orders.insertMany( [
{
_id: 101,
customer_name: "John Doe",
timestamp: "2024-05-11T010:00:00Z",
product_ids: [1, 2],
total: 1200
},
{
_id: 102,
customer_name: "Jane Smith",
timestamp: "2024-05-11T012:00:00Z",
product_ids: [2],
total: 100
}
] )

이 스키마 에서는 주문 정보에 액세스 때마다 $lookup 작업을 사용해야 합니다. $lookup 작업을 실행하면 쿼리 복잡성이 증가하고 성능이 저하됩니다. $lookup 작업의 사용을 줄이려면 액세스하는 데이터를 단일 컬렉션 에 저장 합니다.

하위 집합 스키마 설계 패턴 을 사용하여 orders 컬렉션 에 제품 세부 정보의 하위 집합을 포함할 수 있습니다. 이를 통해 단일 컬렉션 을 쿼리 하여 필요한 결과를 반환할 수 있습니다. orders 컬렉션 과 관련이 없는 제품 세부 정보 및 문서는 products 컬렉션 에 남아 있습니다.

//orders collection
db.orders.insertMany( [
{
_id: 101,
customer_name: "John Doe",
timestamp: "2024-05-11T10:00:00Z",
products: [
{
product_id: 1,
name: "Laptop",
price: 1000
},
{
product_id: 2,
name: "Headphones",
price: 100
}
],
total: 1100
},
{
_id: 102,
customer_name: "Jane Smith",
timestamp: "2024-05-11T12:00:00Z",
products: [
{
product_id: 2,
name: "Headphones",
price: 100
}
],
total: 100
}
] )
//products collection
db.products.insertMany( [
{
_id: 1,
name: "Laptop",
price: 1000,
manufacturer: "TechCorp",
category: "Electronics",
description: "Fastest computer on the market."
},
{
_id: 2,
name: "Headphones",
price: 100,
manufacturer: "Sound",
category: "Accessories",
description: "The latest sound technology."
},
{
_id: 3,
name: "Tablet",
price: 200,
manufacturer: "TechCorp",
category: "Electronics",
description: "The most compact tablet."
}
] )

이 접근 방식을 사용하면 product 컬렉션 의 키 필드를 orders 컬렉션 에 포함하여 여러 쿼리를 피하면서 컬렉션을 별도로 유지할 수 있습니다. 이렇게 하면 단일 쿼리 에서 필요한 모든 정보에 액세스 할 수 있으므로 읽기 성능이 향상되고 데이터 검색이 간소화됩니다. 그러나 잠재적인 문서 크기 제한과 데이터 중복을 고려하는 것이 중요합니다.

돌아가기

비대해진 문서