Hướng dẫn what does lookup do in mongodb? - tra cứu làm gì trong 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 what does lookup do in mongodb? - tra cứu làm gì trong 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.

như

Chỉ định tên của trường mảng mới để thêm vào các tài liệu đã tham gia. 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. Nếu tên được chỉ định đã tồn tại trong tài liệu đã tham gia, trường hiện tại sẽ bị ghi đè.

Việc sử dụng tra cứu trong MongoDB là gì?

$ Tra cứu thực hiện một trận đấu bình đẳng trên Localfield với Foreign Field từ các tài liệu của bộ sưu tập. Nếu một tài liệu đầu vào không chứa LocalField, thì $ Tra cứu sẽ coi trường là có giá trị null cho mục đích phù hợp.performs an equality match on the localField to the foreignField from the documents of the from collection. If an input document does not contain the localField , the $lookup treats the field as having a value of null for matching purposes.

Để tìm kiếm mongDB là gì?

$ Let có thể truy cập các biến được xác định bên ngoài khối biểu thức của nó, bao gồm các biến hệ thống. Nếu bạn sửa đổi các giá trị của các biến được xác định bên ngoài trong khối VARS, các giá trị mới chỉ có hiệu lực trong biểu thức trong. Ngoài biểu thức trong, các biến giữ lại các giá trị trước đó của chúng.can access variables defined outside its expression block, including system variables. If you modify the values of externally defined variables in the vars block, the new values take effect only in the in expression. Outside of the in expression, the variables retain their previous values.

Tra cứu mongoDB có nhanh không?

Đó là một cách tuyệt vời để thực hiện các truy vấn phức tạp và nó đã cải thiện hiệu suất của ứng dụng của tôi theo những cách mà tôi không bao giờ nghĩ là có thể.Từ những gì tôi có thể nói, tôi đã tìm thấy: Tìm + tổng hợp nhanh hơn so với Lookup $ đặt trước nhanh hơn so với Tra cứu $ tùy chỉnh nhưng sau đó tôi tự hỏi tại sao Tùy chỉnh $ Tra cứu tồn tại ...find + aggregate faster than preset $lookup which is faster than custom $lookup But then I wonder why custom $lookup exists...

Tra cứu có chậm trong MongoDB không?

Nó là chậm vì nó không sử dụng một chỉ mục.Đối với mỗi tài liệu trong bộ sưu tập nhật ký, nó đang thực hiện quét bộ sưu tập đầy đủ trên bộ sưu tập đồ thị.. For each document in the logs collection, it is doing a full collection scan on the graphs collection.