LocalField trong MongoDB là gì?

Hai phần đầu tiên của khóa học này hướng dẫn bạn quy trình xây dựng một câu lệnh tổng hợp truy xuất dữ liệu từ bộ sưu tập

db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
5 trong cơ sở dữ liệu
db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
6. Trong phần đầu tiên, bạn đã sử dụng IntelliShell để tạo câu lệnh và lưu nó vào state_transactions. tập tin js. Trong phần thứ hai, bạn đã nhập tệp vào Trình chỉnh sửa tập hợp, nơi bạn đã thêm hai giai đoạn vào quy trình bán hàng. Cùng với nhau, các phần này đã cung cấp cho bạn nền tảng để làm việc với các câu lệnh
db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
7 trong cả IntelliShell và Trình chỉnh sửa tổng hợp

Trong phần này, bạn sẽ tinh chỉnh câu lệnh hơn nữa, nhập lại câu lệnh đó vào Trình chỉnh sửa tập hợp. Lần này, bạn sẽ thêm ba giai đoạn nữa và cập nhật một số giai đoạn hiện có. Ở một trong các giai đoạn mới, bạn sẽ thực hiện thao tác tra cứu để truy xuất dữ liệu từ bộ sưu tập thứ hai trong cùng một cơ sở dữ liệu. Sau đó, bạn sẽ chuyển đổi các giá trị trong một trong các trường tra cứu, rồi thêm một trường sử dụng các giá trị đó để tính tỷ lệ. Cuối cùng, bạn sẽ giới hạn kết quả của câu lệnh

db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
7 trong năm tài liệu hàng đầu có tỷ lệ cao nhất

Đến cuối phần này, bạn sẽ học cách

  • Thêm dữ liệu tra cứu vào quy trình tổng hợp
  • Chuyển đổi giá trị chuỗi trong một trong các trường tra cứu thành số nguyên
  • Thêm trường tỷ lệ được tính toán dựa trên trường tra cứu đã chuyển đổi
  • Giới hạn số lượng tài liệu trả lại

Những gì bạn sẽ cần

  • Truy cập vào cụm MongoDB Atlas
  • Truy cập vào các trạng thái_giao dịch. js mà bạn đã cập nhật trong phần thứ hai
  • Khả năng tải xuống một. tệp json từ internet

Làm việc với các toán tử tổng hợp nâng cao

Chìa khóa để xây dựng một tuyên bố tổng hợp là đảm bảo rằng nó bao gồm các giai đoạn cần thiết để xử lý tài liệu theo đúng trình tự và trả về kết quả mong muốn. Để trợ giúp cho các giai đoạn này, MongoDB cung cấp một tập hợp các toán tử tổng hợp thực hiện các hoạt động khác nhau trên đường dẫn tổng hợp. Mỗi giai đoạn trong quy trình được liên kết với một toán tử tổng hợp duy nhất xác định cách các tài liệu đã nhập sẽ được xử lý và xuất sang giai đoạn quy trình tiếp theo

Trong hai phần đầu tiên của khóa học này, bạn đã làm việc với các toán tử sau khi xây dựng câu lệnh

db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
7 của mình

  • $match. Lọc ra tất cả các tài liệu từ quy trình ngoại trừ những tài liệu phù hợp với điều kiện đã chỉ định
  • nhóm $. Nhóm các tài liệu dựa trên một biểu thức đã chỉ định và xuất một tài liệu cho mỗi nhóm. Các tài liệu được xuất ra thường bao gồm một hoặc nhiều trường được tính toán để tính toán các giá trị tích lũy
  • dự án $. Tái cấu trúc từng tài liệu trong đường ống bằng cách thêm, giữ lại, định hình lại hoặc loại bỏ các trường
  • $replaceRoot. Thay thế từng tài liệu trong quy trình bán hàng bằng tài liệu được nhúng đã chỉ định.  
  • $sắp xếp. Sắp xếp lại các tài liệu trong đường ống dựa trên logic sắp xếp đã chỉ định

Tại thời điểm này, bạn đã khá quen thuộc với các toán tử này, nhưng nếu bạn có bất kỳ câu hỏi nào về chúng, hãy tham khảo hai phần đầu tiên trong khóa học này hoặc tài liệu MongoDB

tra cứu $

Trong phần này của khóa học, bạn sẽ học cách sử dụng một số toán tử tổng hợp khác. Toán tử đầu tiên trong số này là toán tử

db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
1, nối các tài liệu trong bộ sưu tập chính với các tài liệu trong bộ sưu tập thứ cấp. Bộ sưu tập chính là bộ sưu tập mà bạn dựa vào đó để tuyên bố
db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
7. Bộ sưu tập thứ cấp là bộ chứa dữ liệu bạn sẽ kết hợp vào quy trình tổng hợp dựa trên các giá trị phù hợp. Để sử dụng toán tử
db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
1, bộ sưu tập thứ cấp phải không được phân đoạn và nằm trong cùng cơ sở dữ liệu với bộ sưu tập chính.  

Khi bạn chạy một giai đoạn dựa trên toán tử

db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
1, MongoDB sẽ thêm một trường mảng vào mỗi tài liệu trong bộ sưu tập chính. Trường mảng bao gồm một phần tử cho mỗi tài liệu trong bộ sưu tập thứ cấp phù hợp với các điều kiện do toán tử đặt. Ví dụ: nếu chỉ có một tài liệu khớp với điều kiện đã chỉ định, thì mảng sẽ chỉ bao gồm một phần tử, phần tử này sẽ chứa tài liệu phù hợp

Loại hoạt động tra cứu cơ bản nhất được gọi là đối sánh vốn chủ sở hữu. Trong đối sánh vốn chủ sở hữu, các tài liệu trong bộ sưu tập chính chứa một trường khớp với một trường trong bộ sưu tập thứ cấp. Tài liệu được coi là khớp giữa hai bộ sưu tập khi các giá trị trường bằng nhau. Cú pháp sau đây cho thấy các yếu tố cần thiết để thực hiện khớp vốn chủ sở hữu

$lookup:
{
  from: secondary_collection,
  localField: primary_collection_field,
  foreignField: secondary_collection_field,
  as: new_array_field_name
}

Toán tử

db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
1 nhận bốn đối số mà bạn chuyển vào toán tử dưới dạng tài liệu có bốn trường

  • Đối số
    db.invoices.aggregate([
      {
        $lookup:
        {
          from: "products",
          localField: "product_sku",
          foreignField: "sku",
          as: "product_info"
        }
      }
    ])
    6 chỉ định tên của bộ sưu tập thứ cấp, bộ sưu tập này phải nằm trong cùng một cơ sở dữ liệu
  • Đối số
    db.invoices.aggregate([
      {
        $lookup:
        {
          from: "products",
          localField: "product_sku",
          foreignField: "sku",
          as: "product_info"
        }
      }
    ])
    7 chỉ định tên của trường trong bộ sưu tập chính dựa trên đối sánh
  • Đối số
    db.invoices.aggregate([
      {
        $lookup:
        {
          from: "products",
          localField: "product_sku",
          foreignField: "sku",
          as: "product_info"
        }
      }
    ])
    8 chỉ định tên của trường trong bộ sưu tập thứ cấp dựa trên đối sánh
  • Đối số
    db.invoices.aggregate([
      {
        $lookup:
        {
          from: "products",
          localField: "product_sku",
          foreignField: "sku",
          as: "product_info"
        }
      }
    ])
    9 chỉ định tên của trường mảng sẽ được thêm vào các tài liệu trong bộ sưu tập chính hoặc chính xác hơn là các tài liệu trong đường dẫn tổng hợp. Mảng sẽ chứa các tài liệu phù hợp từ bộ sưu tập thứ cấp

Để chứng minh điều này hoạt động như thế nào, giả sử bạn có hai tập hợp—

$set: { new_field_name: field_expression, .. }
0 và
$set: { new_field_name: field_expression, .. }
1—và bạn đang xây dựng một câu lệnh
db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
7 dựa trên tập hợp
$set: { new_field_name: field_expression, .. }
0

Đối với mỗi tài liệu trong bộ sưu tập

$set: { new_field_name: field_expression, .. }
0, bạn muốn truy xuất thông tin cụ thể về sản phẩm từ bộ sưu tập
$set: { new_field_name: field_expression, .. }
1.  

Trường

$set: { new_field_name: field_expression, .. }
6 trong bộ sưu tập
$set: { new_field_name: field_expression, .. }
0 khớp với trường
$set: { new_field_name: field_expression, .. }
8 trong bộ sưu tập
$set: { new_field_name: field_expression, .. }
1, vì vậy bạn có thể sử dụng các trường này với toán tử
db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
1 để thực hiện đối sánh vốn chủ sở hữu, như minh họa trong ví dụ sau

db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])

Ví dụ nên khá đơn giản

  • Đối số
    db.invoices.aggregate([
      {
        $lookup:
        {
          from: "products",
          localField: "product_sku",
          foreignField: "sku",
          as: "product_info"
        }
      }
    ])
    6 chỉ định
    $set: { new_field_name: field_expression, .. }
    1 là bộ sưu tập thứ cấp.  
  • Đối số
    db.invoices.aggregate([
      {
        $lookup:
        {
          from: "products",
          localField: "product_sku",
          foreignField: "sku",
          as: "product_info"
        }
      }
    ])
    7 chỉ định trường
    $set: { new_field_name: field_expression, .. }
    6 trong bộ sưu tập
    $set: { new_field_name: field_expression, .. }
    0
  • Đối số
    db.invoices.aggregate([
      {
        $lookup:
        {
          from: "products",
          localField: "product_sku",
          foreignField: "sku",
          as: "product_info"
        }
      }
    ])
    8 chỉ định trường
    $set: { new_field_name: field_expression, .. }
    8 trong bộ sưu tập
    $set: { new_field_name: field_expression, .. }
    1
  • Đối số
    db.invoices.aggregate([
      {
        $lookup:
        {
          from: "products",
          localField: "product_sku",
          foreignField: "sku",
          as: "product_info"
        }
      }
    ])
    9 gán tên
    db.invoices.aggregate([
      {
        $lookup:
        {
          from: "products",
          localField: "product_sku",
          foreignField: "sku",
          as: "product_info"
        }
      }
    ])
    90 cho trường mảng mới được thêm vào đường dẫn

Nếu bạn chạy câu lệnh này, nó sẽ trả về các tài liệu trong bộ sưu tập

$set: { new_field_name: field_expression, .. }
0 và mỗi tài liệu sẽ chứa trường mảng
db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
90, bao gồm một phần tử cho mỗi tài liệu phù hợp (hoặc không có phần tử nào nếu không có tài liệu phù hợp). Hình dưới đây cho thấy một ví dụ về kết quả có thể trông như thế nào khi được hiển thị trong Chế độ xem dạng cây

LocalField trong MongoDB là gì?

Tài liệu đầu tiên trong kết quả được mở rộng để hiển thị mảng

db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
90 và các phần tử của nó. Trong trường hợp này, mảng chỉ chứa một phần tử, nghĩa là chỉ một tài liệu trong bộ sưu tập
$set: { new_field_name: field_expression, .. }
1 phù hợp với tiêu chí đã chỉ định. Lưu ý rằng giá trị
$set: { new_field_name: field_expression, .. }
8 trong mảng
db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
90 có cùng giá trị với giá trị
$set: { new_field_name: field_expression, .. }
6 trong tài liệu chính. Trong các bài tập tiếp theo, bạn sẽ có cái nhìn sâu hơn về hoạt động của toán tử
db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
1 và các loại kết quả mà bạn có thể mong đợi

bộ $

Một toán tử khác mà chúng ta sẽ đề cập trong các bài tập là toán tử

db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
99, là bí danh của toán tử
$lookup:
{
  from: secondary_collection,
  localField: primary_collection_field,
  foreignField: secondary_collection_field,
  as: new_array_field_name
}
90. Toán tử
db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
99 thêm một hoặc nhiều trường vào quy trình tổng hợp, với các giá trị trường được xác định bởi biểu thức của toán tử. Nếu tên được sử dụng cho một trường mới giống với tên hiện có, MongoDB sẽ ghi đè các giá trị trong trường hiện có bằng các giá trị được xác định trong biểu thức của toán tử.  

Cú pháp sau đây cho thấy các phần tử tạo nên một biểu thức

db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
99

$set: { new_field_name: field_expression, .. }

Khi sử dụng toán tử

db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
99 để tạo trường, bạn phải cung cấp tên trường, theo sau là biểu thức xác định giá trị của trường. Ví dụ: câu lệnh tổng hợp sau đây thêm một trường có tên là
$lookup:
{
  from: secondary_collection,
  localField: primary_collection_field,
  foreignField: secondary_collection_field,
  as: new_array_field_name
}
94 vào quy trình bán hàng và sử dụng toán tử
$lookup:
{
  from: secondary_collection,
  localField: primary_collection_field,
  foreignField: secondary_collection_field,
  as: new_array_field_name
}
95 để đặt giá trị của nó

db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
6

Toán tử

$lookup:
{
  from: secondary_collection,
  localField: primary_collection_field,
  foreignField: secondary_collection_field,
  as: new_array_field_name
}
95 cộng các giá trị từ các trường
$lookup:
{
  from: secondary_collection,
  localField: primary_collection_field,
  foreignField: secondary_collection_field,
  as: new_array_field_name
}
97,
$lookup:
{
  from: secondary_collection,
  localField: primary_collection_field,
  foreignField: secondary_collection_field,
  as: new_array_field_name
}
98 và
$lookup:
{
  from: secondary_collection,
  localField: primary_collection_field,
  foreignField: secondary_collection_field,
  as: new_array_field_name
}
99 trong tập hợp
$set: { new_field_name: field_expression, .. }
0 lại với nhau. Trường
$lookup:
{
  from: secondary_collection,
  localField: primary_collection_field,
  foreignField: secondary_collection_field,
  as: new_array_field_name
}
94 sau đó được thêm vào quy trình bán hàng, cùng với các trường khác trong tài liệu của bộ sưu tập. Hình dưới đây cho thấy dữ liệu đầu ra có thể trông như thế nào sau khi trường mới được thêm vào quy trình

LocalField trong MongoDB là gì?

giới hạn $

Các bài tập trong phần này cũng giới thiệu cho bạn về toán tử

db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
52, giới hạn số lượng tài liệu được chuyển sang giai đoạn tiếp theo trong quy trình. Nếu bạn thêm giai đoạn
db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
52 ngay sau giai đoạn
db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
54 mà không có bất kỳ giai đoạn nào xen vào, MongoDB có thể hợp nhất hai giai đoạn để giảm số lượng mục cần lưu trữ trong bộ nhớ

Để sử dụng toán tử

db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
52, bạn chỉ cần chỉ định tên toán tử và một số nguyên dương làm biểu thức của nó. Số nguyên xác định số lượng tài liệu tối đa được đưa vào quy trình bán hàng, như thể hiện trong cú pháp sau

db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
9

Ví dụ: nếu bạn muốn giới hạn số lượng tài liệu trong bộ sưu tập hóa đơn là 25, bạn có thể xác định giai đoạn đó như sau

$lookup:
{
  from: secondary_collection,
  localField: primary_collection_field,
  foreignField: secondary_collection_field,
  as: new_array_field_name
}
9

Bây giờ chỉ 25 tài liệu hàng đầu sẽ được trả lại, dựa trên cách các tài liệu được sắp xếp khi nhập vào giai đoạn

db.invoices.aggregate([
  {
    $lookup:
    {
      from: "products",
      localField: "product_sku",
      foreignField: "sku",
      as: "product_info"
    }
  }
])
52

localField và ForeignField trong MongoDB là gì?

từ. Bộ sưu tập sử dụng để tra cứu trong cùng một cơ sở dữ liệu. trường địa phương. Trường trong tập hợp chính có thể được sử dụng làm mã định danh duy nhất trong tập hợp from. trường nước ngoài. Trường trong bộ sưu tập từ có thể được sử dụng làm mã định danh duy nhất trong bộ sưu tập chính.

Sự khác biệt giữa cư trú và tra cứu là gì?

Lần duy nhất $lookup hoạt động hiệu quả hơn so với điền là khi xử lý số lượng tham gia tài liệu < 20 . Vì vậy, nếu bạn đang sử dụng findOne hoặc limit(

Làm cách nào để tìm dữ liệu từ hai bộ sưu tập trong MongoDB?

Để thực hiện MongoDB Tham gia hai bộ sưu tập, bạn phải sử dụng toán tử tra cứu $ . Nó được định nghĩa là một giai đoạn thực hiện nối ngoài bên trái với một bộ sưu tập khác và hỗ trợ lọc dữ liệu từ các tài liệu đã nối. Ví dụ: nếu người dùng yêu cầu tất cả các điểm từ tất cả học sinh, thì truy vấn bên dưới có thể được viết. Sinh viên.

Chúng tôi có thể tham gia hai bộ sưu tập trong MongoDB không?

Thao tác THAM GIA MongoDB với hai bộ sưu tập được thực hiện bằng cách sử dụng toán tử tra cứu $ được phát triển có phiên bản 3. 2. Toán tử tra cứu $ tiến hành một tài liệu có các trường bên dưới. Từ. Nó nêu bộ sưu tập trong cơ sở dữ liệu giống hệt nhau để thực hiện phép nối với nhưng với Hạn chế bộ sưu tập được chia nhỏ