Hướng dẫn how does pull work in mongodb? - pull hoạt động như thế nào trong mongodb?

Các toán tử $ Push và $ Pull là một phần của các toán tử mảng được thiết kế để sửa đổi các mảng trong các tài liệu MongoDB. Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách các nhà khai thác đẩy và kéo hoạt động và cách sử dụng chúng với các sửa đổi và điều kiện bổ sung.

[Bài viết này là một phần của Hướng dẫn MongoDB của chúng tôi. Sử dụng menu bên phải để điều hướng.]

Các toán tử đẩy và kéo là gì?

Đẩy và kéo là hai hoạt động được sử dụng để thêm và loại bỏ các phần tử khỏi các mảng trong tài liệu MongoDB. Các phần tử đẩy và kéo được thực hiện bằng cách sử dụng các toán tử Push Push và $ kéo của MongoDB, tương ứng:

  • Toán tử $ Push nối một giá trị được chỉ định vào một mảng. appends a specified value to an array.
  • Toán tử Pull $ sẽ loại bỏ các giá trị khỏi một mảng phù hợp với một điều kiện được chỉ định. removes values from an array that matches a specified condition.

Cú pháp cơ bản của toán tử $ đẩy

{ $push: { : , ... } }

Cú pháp cơ bản của toán tử $ kéo

{ $pull: { : , ... } }

Hãy cùng nhìn vào từng chi tiết hơn, bao gồm cả cách chúng hoạt động và cách bạn có thể sử dụng chúng.

How HowDB $ Push Toán tử hoạt động

Bạn có thể thấy toán tử $ đẩy có hai đối số:

  • Trường mảng
  • Giá trị được gắn vào trường mảng được chỉ định

Nếu trường mảng không có trong tài liệu, toán tử đẩy $ sẽ tạo ra một trường mảng mới. Tuy nhiên, nếu trường được chỉ định không phải là một mảng, MongoDB sẽ trả về lỗi.

$ đẩy các công cụ sửa đổi vận hành

Chức năng của toán tử $ đẩy có thể được mở rộng thêm bằng cách sử dụng các bộ sửa đổi sau.

  • $ mỗi. $ Mỗi công cụ sửa đổi được sử dụng để nối nhiều giá trị vào một mảng. Nếu $ mỗi toán tử không được chỉ định, tất cả các giá trị trong toán tử Push $ sẽ được thêm vào dưới dạng một mục duy nhất vào trường mảng trong tài liệu. The $each modifier is used to append multiple values to an array. If the $each operator is not specified, all values in the $push operator will be appended as a single item to the array field in the document.
  • $ lát. Điều này giới hạn số lượng các phần tử trong mảng. Tuy nhiên, điều này phải được sử dụng cùng với $ mỗi công cụ sửa đổi. This limits the number of elements in the array. However, this must be used in conjunction with the $each modifier.
  • $ Sắp xếp. Các công cụ sửa đổi $ sắp xếp đặt hàng các mục trong mảng. Công cụ sửa đổi này cũng yêu cầu sử dụng $ mỗi công cụ sửa đổi. The $sort modifiers orders the items in the array. This modifier also requires the use of $each modifier.
  • $ vị trí. Toán tử $ Push nối một mục mới đến cuối một mảng theo mặc định. Sử dụng công cụ sửa đổi vị trí $ nếu bạn muốn chỉ định rõ ràng vị trí nơi mục phải được nối thêm. The $push operator appends a new item to the end of an array by default. Use the $position modifier if you want to explicitly specify the location where the item should be appended.

Hoạt động $ Push được thực hiện theo thứ tự sau, bất kể thứ tự xác định các công cụ sửa đổi:

  1. Cập nhật mảng để thêm các phần tử trong các vị trí được chỉ định.
  2. Sắp xếp mảng nếu công cụ sửa đổi $ sort được chỉ định.
  3. Cắt phần mảng nếu công cụ sửa đổi lát cắt $.
  4. Lưu trữ mảng.

Tiếp theo, chúng ta sẽ xem xét cách chúng ta có thể sử dụng các hoạt động đẩy MongoDB $ để thao túng các tài liệu. Tôi sẽ hiển thị một vài ví dụ, vì vậy hãy nhảy vào cái bạn cần:

  • Nối một giá trị duy nhất vào một mảng
  • Nối nhiều giá trị vào một mảng
  • Sử dụng các sửa đổi $ Sắp xếp và $ Slice
  • Sử dụng công cụ sửa đổi vị trí $

Đối với bộ dữ liệu cơ sở cho các ví dụ này, tôi sẽ sử dụng bộ sưu tập caramedetails.

db.vehicledetails.find[].pretty[]

Result:

Nối một giá trị duy nhất vào một mảng

Nối nhiều giá trị vào một mảng

Sử dụng các sửa đổi $ Sắp xếp và $ Slice

Sử dụng công cụ sửa đổi vị trí $

db.vehicledetails.update[{"_id": ObjectId["5fbc52f05f9a62418038240d"]}, {$push: {"vehicle_colours": "red"}}]

Result:

Đối với bộ dữ liệu cơ sở cho các ví dụ này, tôi sẽ sử dụng bộ sưu tập caramedetails.

Hãy cho chúng tôi xem làm thế nào chúng ta có thể nối một giá trị duy nhất vào một mảng khi có trường mảng và nó không có mặt. Trong tất cả các ví dụ, trường _id _id được sử dụng để chỉ ra tài liệu nào nên được thêm vào mảng.

db.vehicledetails.update[{"_id": ObjectId["5fbc52f05f9a62418038240d"]}, {$push: {"vehicle_colours": "green"}}]

Result:

Ví dụ: Không có trường mảng

db.vehicledetails.update[{"_id": ObjectId["5fbc52f05f9a62418038240d"]}, {$push: {"make": "green"}}]

Result:

Một trường mảng mới sẽ được tạo với tên trường được chỉ định trong toán tử $ Push.

Ví dụ: Khi trường mảng có mặt

Mục mới sẽ được nối vào cuối mảng.

Nếu chúng tôi cố gắng sử dụng toán tử $ Push cho trường không phải, nó sẽ dẫn đến lỗi. Mã sau đây trả về một lỗi khi chúng tôi đang cố gắng nối một giá trị vào trường không phải là một trò chơi.

db.vehicledetails.update[{"_id": ObjectId["5fbc52f55f9a62418038240e"]}, {$push: {"vehicle_colours": ["blue", "red", "yellow"]}}]

Result:

Nối nhiều giá trị vào một mảng

Bạn có thể nối nhiều giá trị vào một mảng có hoặc không có $ mỗi công cụ sửa đổi.

Ví dụ: Nhiều giá trị không có $ mỗi công cụ sửa đổi

db.vehicledetails.update[{"_id": ObjectId["5fbc52f55f9a62418038240e"]}, {$push: {"vehicle_colours": { $each :["blue", "red", "yellow"]}}}]

Result:

Nếu không có công cụ sửa đổi $, MongoDB sẽ nối tất cả các giá trị là một giá trị duy nhất cho trường mảng được chỉ định.

Ở đây, bạn có thể thấy màu xanh da trời, màu đỏ, và màu vàng là các yếu tố của một mảng mới được tạo ra. Nhưng mảng đó chỉ là một yếu tố của mảng moteical_colours.

Ví dụ: Nhiều giá trị với $ mỗi công cụ sửa đổi

Khi một hoạt động đẩy $ được xác định với $ mỗi công cụ sửa đổi, mỗi phần tử trong hoạt động $ đẩy sẽ được thêm vào mảng dưới dạng các mục riêng lẻ.

db.vehicledetails.update[{"_id": ObjectId["5fbc52fb5f9a62418038240f"]}, {$push: {"vehicle_colours": { $each :["silver", "orange"], $sort: 1}}}]

Result:

Tại đây, xe cộ_colours có ba yếu tố sau khi hoạt động $ đẩy.

db.vehicledetails.update[{"_id": ObjectId["5fbc52fb5f9a62418038240f"]}, {$push: {"vehicle_colours": { $each :["dark blue"], $sort: 1, $slice: 5}}}]

Result:

Sử dụng công cụ sửa đổi vị trí $

Công cụ sửa đổi vị trí $ được sử dụng để chỉ định vị trí trong mảng nơi nên thêm mục mới. Điều này sẽ ghi đè hành vi mặc định của việc nối các mục vào cuối mảng.

Trong ví dụ sau, chúng tôi sẽ thêm màu trắng trắng vào phần đầu của trường mảng trên xe cộ. Trong công cụ sửa đổi vị trí của vị trí $, số không [0] được sử dụng để chỉ ra vị trí đầu tiên [chỉ mục 0] của mảng.

{ $pull: { : , ... } }
0

Result:

How HowDB $ Pull Toán tử hoạt động

Toán tử kéo $ được sử dụng để xóa tất cả các phiên bản của giá trị hoặc giá trị khỏi tài liệu MongoDB phù hợp với một điều kiện được chỉ định. Nếu một mảng chứa các tài liệu nhúng hoặc lồng nhau, điều kiện toán tử kéo $ được chỉ định sẽ được áp dụng cho từng phần tử mảng như thể mỗi phần tử mảng là một tài liệu trong một bộ sưu tập.

Khi giá trị được chỉ định được loại bỏ là một mảng, toán tử kéo $ chỉ xóa các phần tử trong mảng phù hợp với giá trị chính xác được chỉ định, bao gồm thứ tự xác định các phần tử. Nếu giá trị được chỉ định để xóa là một tài liệu, toán tử Pull $ sẽ xóa các phần tử phù hợp với các trường và giá trị được chỉ định. Trong trường hợp này, thứ tự của các trường bị loại bỏ.

Bây giờ tôi sẽ hướng dẫn bạn qua một vài ví dụ về toán tử $ kéo. Nhảy đến những người bạn cần:

  • Xóa một mục từ một mảng
  • Xóa tất cả các mục bằng một giá trị cụ thể
  • Xóa các mục phù hợp với Pull $ được chỉ định
  • Xóa các mục khỏi một mảng tài liệu

Trong các ví dụ này, chúng tôi sẽ sử dụng tập dữ liệu sau để chứng minh:

Xóa một mục từ một mảng

Xóa tất cả các mục bằng một giá trị cụ thể

{ $pull: { : , ... } }
1

Result:

Xóa các mục phù hợp với Pull $ được chỉ định

Xóa các mục khỏi một mảng tài liệu

{ $pull: { : , ... } }
2

Result:

Trong các ví dụ này, chúng tôi sẽ sử dụng tập dữ liệu sau để chứng minh:

Ở đây, chúng tôi sẽ loại bỏ một giá trị đơn lẻ 2018 2018 khỏi trường Model Model_Year. Trường _id _id được sử dụng để chỉ ra tài liệu mà hoạt động kéo $ sẽ xảy ra.

Xóa tất cả các mục bằng một giá trị được chỉ định

Trong ví dụ này, chúng tôi sẽ sử dụng bộ sưu tập của các trò chơi điện tử, để loại bỏ các màu sắc màu xanh lam và màu xanh lá cây từ trường Mảng carments_colours và loại bỏ mô hình năm 2020 khỏi trường Model Model_Year.

{ $pull: { : , ... } }
3

Result:

Xóa các mục khớp với điều kiện kéo $ được chỉ định

Sử dụng bộ sưu tập Student Student_grades, chúng ta hãy tạo một điều kiện để loại bỏ tất cả các lớp nhỏ hơn hoặc bằng 50 từ tài liệu sau.

Tài liệu chưa được sửa đổi:

Tài liệu đã sửa đổi:

Điều kiện được chỉ định [{$ lte: 50}] đã loại bỏ bất kỳ mục nào nhỏ hơn hoặc bằng 50 trong trường mảng của lớp.

{ $pull: { : , ... } }
4

Result:

Xóa các mục khỏi một mảng tài liệu

Trong ví dụ này, chúng tôi sẽ sử dụng bộ sưu tập của Student Student_Grades, để xóa tất cả các giá trị nhỏ hơn hoặc bằng 50 trong trường mảng của lớp trên các tài liệu trong bộ sưu tập.

Bộ sưu tập không sửa đổi:

  • Bộ sưu tập sửa đổi:
  • Đầu ra trên chứng minh cho chúng tôi rằng bất kỳ giá trị nào nhỏ hơn hoặc bằng 50 đã bị xóa khỏi trường mảng của lớp trên mạng trong tất cả các tài liệu trong bộ sưu tập của Student Student_Grades.
  • Điều đó kết thúc hướng dẫn này.
  • Đọc liên quan

BMC Machine Learning & Big Data Blog

Hướng dẫn MongoDB, một loạt các bài báo và hướng dẫn

Root $$ trong MongoDB là gì?

Biến gốc $$ chứa các tài liệu nguồn cho nhóm. Nếu bạn muốn chuyển chúng qua không sửa đổi, bạn có thể thực hiện điều này bằng cách $ đẩy root $$ vào đầu ra từ nhóm.contains the source documents for the group. If you'd like to just pass them through unmodified, you can do this by $pushing $$ROOT into the output from the group.

Làm cách nào để loại bỏ nhiều phần tử khỏi một mảng trong MongoDB?

Toán tử $ Pullall: Toán tử $ Pullall sẽ loại bỏ tất cả các phần tử khỏi mảng được xác định.Bây giờ, hãy sử dụng truy vấn sau để xóa tất cả các giá trị của 8 khỏi mảng trong đó _ID là 1. Chúng ta có thể xác minh điều này bằng cách kiểm tra bộ sưu tập bằng phương thức Find [] ...
$pull..
$pullAll..

$ Push trong MongoDB là gì?

Nếu trường không có trong tài liệu để cập nhật, $ Push sẽ thêm trường mảng với giá trị làm phần tử của nó.Nếu trường không phải là một mảng, hoạt động sẽ thất bại.Nếu giá trị là một mảng, $ Push sẽ cộng đồng toàn bộ mảng là một phần tử duy nhất.Để thêm từng phần tử của giá trị một cách riêng biệt, hãy sử dụng $ mỗi công cụ sửa đổi với $ Push.adds the array field with the value as its element. If the field is not an array, the operation will fail. If the value is an array, $push appends the whole array as a single element. To add each element of the value separately, use the $each modifier with $push .

Làm cách nào để bật một mảng trong MongoDB?

Toán tử $ POP sẽ loại bỏ phần tử đầu tiên hoặc cuối cùng của một mảng.Vượt qua $ pop một giá trị -1 để loại bỏ phần tử đầu tiên của một mảng và 1 để loại bỏ phần tử cuối cùng trong một mảng.Toán tử $ pop có biểu mẫu: {$ pop: {:, ...}}}. Pass $pop a value of -1 to remove the first element of an array and 1 to remove the last element in an array. The $pop operator has the form: { $pop: { : , ... } }

Bài Viết Liên Quan

Chủ Đề