Hướng dẫn lookup pipeline mongodb - đường ống tra cứu mongodb

Tài liệu về nhà → Hướng dẫn sử dụng MongoDBMongoDB Manual

Trên trang này

  • Sự định nghĩa
  • Cú pháp
  • Phù hợp với bình đẳng với một điều kiện tham gia duy nhất
  • Tham gia các điều kiện và các nhóm phụ trên một bộ sưu tập được tham gia
  • Các nhóm phụ tương quan bằng cách sử dụng cú pháp ngắn gọn
  • Hành vi
  • Quan điểm và đối chiếu
  • Những hạn chế
  • Hỗ trợ tìm kiếm Atlas
  • Bộ sưu tập Sharded
  • Công cụ thực hiện truy vấn dựa trên khe
  • Ví dụ
  • Thực hiện một sự bình đẳng duy nhất với $lookup
  • Sử dụng $lookup với một mảng
  • Sử dụng $lookup với $mergeObjects
  • Thực hiện nhiều lần tham gia và trình điều khiển tương quan với $lookup
  • Thực hiện một trình điều khiển không tương thích với $lookup
  • Thực hiện trình độ con tương quan ngắn gọn với $lookup

$lookupChanged trong phiên bản 5.1.
Hướng dẫn lookup pipeline mongodb - đường ống tra cứu mongodb

Changed in version 5.1.

Thực hiện tham gia bên ngoài bên trái vào một bộ sưu tập trong cùng một cơ sở dữ liệu để lọc trong các tài liệu từ bộ sưu tập "được nối" để xử lý. Giai đoạn $lookup thêm một trường mảng mới vào mỗi tài liệu đầu vào. Trường mảng mới chứa các tài liệu phù hợp từ bộ sưu tập "được tham gia". Giai đoạn $lookup chuyển các tài liệu được định hình lại này cho giai đoạn tiếp theo.$lookup stage adds a new array field to each input document. The new array field contains the matching documents from the "joined" collection. The $lookup stage passes these reshaped documents to the next stage.

Bắt đầu từ MongoDB 5.1, $lookup hoạt động trên các bộ sưu tập Sharded.$lookup works across sharded collections.

Để kết hợp các yếu tố từ hai bộ sưu tập khác nhau, hãy sử dụng giai đoạn đường ống

SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
4.

Giai đoạn $lookup có các cú pháp sau:$lookup stage has the following syntaxes:

Để thực hiện một sự phù hợp bình đẳng giữa một trường từ các tài liệu đầu vào với một trường từ các tài liệu của bộ sưu tập "đã tham gia", giai đoạn $lookup có cú pháp này:$lookup stage has this syntax:

{
$lookup:
{
from: ,
localField: ,
foreignField: ,
as:
}
}

$lookup lấy một tài liệu với các trường này:$lookup takes a document with these fields:

Đồng ruộng

Sự mô tả

từ

Chỉ định bộ sưu tập trong cùng một cơ sở dữ liệu để thực hiện tham gia với.

SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
8 là tùy chọn, bạn có thể sử dụng giai đoạn
SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
9 trong giai đoạn $lookup thay thế. Ví dụ, xem Sử dụng giai đoạn
SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
9 trong giai đoạn $lookup.$lookup stage instead. For an example, see Use a
SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
9 Stage in a $lookup Stage.

Bắt đầu từ MongoDB 5.1, bộ sưu tập được chỉ định trong tham số

SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
8 có thể được chia cắt.

địa phương

Chỉ định trường từ đầu vào tài liệu đến giai đoạn $lookup. $lookup thực hiện một trận đấu bình đẳng trên

{
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
6 với
{
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
7 từ các tài liệu của bộ sưu tập
SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
8. Nếu một tài liệu đầu vào không chứa
{
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
6, $lookup coi trường là có giá trị $lookup1 cho các mục đích phù hợp.$lookup stage. $lookup performs an equality match on the
{
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
6 to the
{
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
7 from the documents of the
SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
8 collection. If an input document does not contain the
{
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
6, the $lookup treats the field as having a value of $lookup1 for matching purposes.

vùng ngoại quốc

Chỉ định trường từ các tài liệu trong bộ sưu tập

SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
8. $lookup thực hiện phù hợp bình đẳng trên
{
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
7 với
{
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
6 từ các tài liệu đầu vào. Nếu một tài liệu trong bộ sưu tập
SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
8 không chứa
{
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
7, $lookup coi giá trị là $lookup1 cho các mục đích phù hợp.$lookup performs an equality match on the
{
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
7 to the
{
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
6 from the input documents. If a document in the
SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
8 collection does not contain the
{
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}
7, the $lookup treats the value as $lookup1 for matching purposes.

như

Chỉ định tên của trường mảng mới để thêm vào các tài liệu đầu vào. Trường mảng mới chứa các tài liệu phù hợp từ bộ sưu tập

SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
8. Nếu tên được chỉ định đã tồn tại trong tài liệu đầu vào, trường hiện tại sẽ được ghi đè.

Hoạt động sẽ tương ứng với câu lệnh Pseudo-SQL sau:

SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);

Xem các ví dụ sau:

  • Thực hiện một sự bình đẳng duy nhất với $lookup

  • Sử dụng $lookup với một mảng

  • Sử dụng $lookup với $mergeObjects

Thực hiện nhiều lần tham gia và trình điều khiển tương quan với $lookup

  • Thực hiện một trình điều khiển không tương thích với $lookup

  • Thực hiện trình độ con tương quan ngắn gọn với $lookup

  • $lookupChanged trong phiên bản 5.1.

Thực hiện tham gia bên ngoài bên trái vào một bộ sưu tập trong cùng một cơ sở dữ liệu để lọc trong các tài liệu từ bộ sưu tập "được nối" để xử lý. Giai đoạn $lookup thêm một trường mảng mới vào mỗi tài liệu đầu vào. Trường mảng mới chứa các tài liệu phù hợp từ bộ sưu tập "được tham gia". Giai đoạn $lookup chuyển các tài liệu được định hình lại này cho giai đoạn tiếp theo.pipeline in a $lookup stage that references document fields from a joined collection. An uncorrelated subquery does not reference joined fields.

Bắt đầu từ MongoDB 5.1, $lookup hoạt động trên các bộ sưu tập Sharded.

Để kết hợp các yếu tố từ hai bộ sưu tập khác nhau, hãy sử dụng giai đoạn đường ống

SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
4.$lookup pipeline stage containing a $lookup7 stage, the $lookup8 operator, or the $lookup9 operator, the subquery is always run again if repeated. Previously, depending on the subquery output size, either the subquery output was cached or the subquery was run again.

Giai đoạn $lookup có các cú pháp sau:

Để thực hiện một sự phù hợp bình đẳng giữa một trường từ các tài liệu đầu vào với một trường từ các tài liệu của bộ sưu tập "đã tham gia", giai đoạn $lookup có cú pháp này:concise correlated subqueries.

$lookup lấy một tài liệu với các trường này:$lookup syntax:

{
$lookup:
{
from: ,
let: { : , …, : },
pipeline: [ ],
as:
}
}

Đồng ruộng$lookup stage accepts a document with these fields:

Đồng ruộng

Sự mô tả

từ

Chỉ định bộ sưu tập trong cùng một cơ sở dữ liệu để thực hiện tham gia với.

SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
8 là tùy chọn, bạn có thể sử dụng giai đoạn
SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
9 trong giai đoạn $lookup thay thế. Ví dụ, xem Sử dụng giai đoạn
SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
9 trong giai đoạn $lookup.$lookup stage instead. For an example, see Use a
SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
9 Stage in a $lookup Stage.

Bắt đầu từ MongoDB 5.1, bộ sưu tập được chỉ định trong tham số

SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
8 có thể được chia cắt.

let

địa phươngpipeline stages. Use the variable expressions to access the fields from the joined collection's documents that are input to the $lookup8.

Bắt đầu từ MongoDB 5.1, $lookup hoạt động trên các bộ sưu tập Sharded.

Để kết hợp các yếu tố từ hai bộ sưu tập khác nhau, hãy sử dụng giai đoạn đường ống

SELECT *, <output array field>
FROM collection
WHERE <output array field> IN (
SELECT *
FROM <collection to join>
WHERE <foreignField> = <collection.localField>
);
4.pipeline stages, use the $lookup9 syntax.

Các biến LET có thể được truy cập bởi các giai đoạn trong đường ống, bao gồm các giai đoạn $lookup bổ sung được lồng trong $lookup8.let variables can be accessed by the stages in the pipeline, including additional $lookup stages nested in the $lookup8.

  • Giai đoạn $mergeObjects2 yêu cầu sử dụng toán tử $mergeObjects3 để truy cập các biến. Toán tử $mergeObjects3 cho phép sử dụng các biểu thức tổng hợp bên trong cú pháp $mergeObjects2.

    Bắt đầu từ MongoDB 5.0, $mergeObjects6, $mergeObjects7, $mergeObjects8, $mergeObjects9 và $lookup0 Các toán tử so sánh được đặt trong toán tử $mergeObjects3 có thể sử dụng chỉ số trên bộ sưu tập

    SELECT *, <output array field>
    FROM collection
    WHERE <output array field> IN (
    SELECT *
    FROM <collection to join>
    WHERE <foreignField> = <collection.localField>
    );
    8 được tham chiếu trong giai đoạn $lookup. Hạn chế:$lookup stage. Limitations:

    • Các chỉ mục đa năng không được sử dụng.

    • Các chỉ mục không được sử dụng để so sánh trong đó toán hạng là một mảng hoặc loại toán hạng không được xác định.

    • Các chỉ mục không được sử dụng để so sánh với nhiều hơn một toán hạng đường dẫn trường.

  • Các giai đoạn khác (không phải là 62) trong đường ống không yêu cầu toán tử $mergeObjects3 để truy cập các biến.pipeline do not require an $mergeObjects3 operator to access the variables.

đường ống

Chỉ định $lookup8 để chạy trên bộ sưu tập đã tham gia. $lookup8 xác định các tài liệu kết quả từ bộ sưu tập được tham gia. Để trả về tất cả các tài liệu, chỉ định mức trống $lookup8 $lookup9.

$lookup8 không thể bao gồm giai đoạn $lookup1 hoặc giai đoạn $lookup2. Bắt đầu từ V6.0, $lookup8 có thể chứa giai đoạn tìm kiếm Atlas ____84 như giai đoạn đầu tiên trong đường ống. Để tìm hiểu thêm, xem hỗ trợ tìm kiếm Atlas.Atlas Search $lookup4 stage as the first stage inside the pipeline. To learn more, see Atlas Search Support.

$lookup8 không thể truy cập trực tiếp vào các trường tài liệu đã tham gia. Thay vào đó, hãy xác định các biến cho các trường tài liệu đã tham gia bằng cách sử dụng tùy chọn LET và sau đó tham chiếu các biến trong các giai đoạn $lookup8.let option and then reference the variables in the $lookup8 stages.

Ghi chú

Để tham chiếu các biến trong các giai đoạn đường ống, hãy sử dụng cú pháp $lookup9.pipeline stages, use the $lookup9 syntax.

Các biến LET có thể được truy cập bởi các giai đoạn trong đường ống, bao gồm các giai đoạn $lookup bổ sung được lồng trong $lookup8.let variables can be accessed by the stages in the pipeline, including additional $lookup stages nested in the $lookup8.

  • Giai đoạn $mergeObjects2 yêu cầu sử dụng toán tử $mergeObjects3 để truy cập các biến. Toán tử $mergeObjects3 cho phép sử dụng các biểu thức tổng hợp bên trong cú pháp $mergeObjects2.

    Bắt đầu từ MongoDB 5.0, $mergeObjects6, $mergeObjects7, $mergeObjects8, $mergeObjects9 và $lookup0 Các toán tử so sánh được đặt trong toán tử $mergeObjects3 có thể sử dụng chỉ số trên bộ sưu tập

    SELECT *, <output array field>
    FROM collection
    WHERE <output array field> IN (
    SELECT *
    FROM <collection to join>
    WHERE <foreignField> = <collection.localField>
    );
    8 được tham chiếu trong giai đoạn $lookup. Hạn chế:$lookup stage. Limitations:

    • Các chỉ mục đa năng không được sử dụng.

    • Các chỉ mục không được sử dụng để so sánh trong đó toán hạng là một mảng hoặc loại toán hạng không được xác định.

    • Các chỉ mục không được sử dụng để so sánh với nhiều hơn một toán hạng đường dẫn trường.

  • Các giai đoạn khác (không phải là 62) trong đường ống không yêu cầu toán tử $mergeObjects3 để truy cập các biến.pipeline do not require an $mergeObjects3 operator to access the variables.

đường ống

Chỉ định $lookup8 để chạy trên bộ sưu tập đã tham gia. $lookup8 xác định các tài liệu kết quả từ bộ sưu tập được tham gia. Để trả về tất cả các tài liệu, chỉ định mức trống $lookup8 $lookup9.