MongoDB kéo đối tượng lồng nhau

Tôi có một tài liệu như thế này

{'mảng'. [['Bob', true], ['Alice', true], ['Mike', false]]}

Tôi muốn xóa mục chứa 'Bob', sau khi thao tác,
tài liệu sẽ trở thành {'arr'. [['Alice', true], ['Mike', false]]}.

Tôi có thể làm cái này như thế nào?

Hoặc tôi nên chọn một kế hoạch khác?

--
Mã là thơ.

Trong hướng dẫn MongoDB này, chúng ta sẽ tìm hiểu “MongoDB xóa một phần tử khỏi một mảng”. Chúng tôi sẽ đề cập đến chủ đề này với các hoạt động và ví dụ khác nhau. Đây là những chủ đề sau đây mà chúng ta sẽ đề cập trong hướng dẫn này

  • Cách xóa phần tử khỏi mảng trong mongodb
  • MongoDB xóa một phần tử khỏi mảng theo id
  • MongoDB xóa một phần tử khỏi chỉ mục mảng
  • MongoDB xóa phần tử cuối cùng khỏi mảng
  • MongoDB xóa một phần tử khỏi một mảng lồng nhau
  • MongoDB xóa nhiều phần tử khỏi mảng

Mục lục

  • Xóa phần tử khỏi mảng trong mongodb
  • MongoDB xóa một phần tử khỏi mảng theo id
  • MongoDB xóa một phần tử khỏi chỉ mục mảng
  • MongoDB xóa phần tử cuối cùng khỏi mảng
  • MongoDB xóa một phần tử khỏi một mảng lồng nhau
  • MongoDB xóa nhiều phần tử khỏi mảng

Xóa phần tử khỏi mảng trong mongodb

MongoDB cung cấp các toán tử sau để xóa phần tử khỏi mảng. Các nhà khai thác là

  • kéo $
  • $pullAll
  • $pop

Bây giờ, chúng ta sẽ tìm hiểu chi tiết tất cả các toán tử này với các ví dụ

Toán tử $pull. Toán tử $pull xóa một phần tử khỏi một mảng hiện có khớp với một điều kiện đã chỉ định

Giả sử, chúng tôi có một bộ sưu tập được gọi là sản phẩm với các tài liệu sau

db.product.insertMany([
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] },
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] },
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
])

Chúng ta có thể xóa một phần tử khỏi mảng bằng truy vấn sau

db.products.update( 
  { _id: 1 }, 
  { $pull: { sizes: "XXL" } } 
)

Ở đây, chúng tôi đã sử dụng phương thức update() và xác định toán tử $pull để xóa phần tử XXL trong đó _id là 1. Sau đó, bạn có thể sử dụng phương thức find() để lấy tất cả các tài liệu

db.product.find()
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }

Chúng tôi đã xóa thành công một phần tử khỏi mảng

Toán tử $pullAll. Toán tử $pullAll xóa tất cả các phần tử khỏi mảng đã xác định

Giả sử, chúng tôi có một bộ sưu tập có tên demo với các tài liệu sau

db.demo.insertMany([
{ "_id" : 1, "bar" : [ 1, 8, 2, 3, 8, 7, 1 ] },
{ "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] },
{ "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }
])

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

db.demo.update( 
  { _id: 1 }, 
  { $pullAll: { bar: [ 8 ] } } 
)

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()

db.demo.find()
{ "_id" : 1, "bar" : [ 1, 2, 3, 7, 1 ] }
{ "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }

Chúng tôi đã xóa thành công phần tử 8 khỏi mảng trong tài liệu 1

Ghi chú

Toán tử $pullAll tương tự như $pull. Sự khác biệt là $pullAll xóa các phần tử khớp với các giá trị được liệt kê. Và, toán tử $pull xóa các giá trị bằng cách chỉ định một truy vấn

Toán tử $pop. Toán tử $pop được sử dụng để loại bỏ phần tử đầu tiên hoặc cuối cùng của một mảng. Nó cung cấp giá trị -1 để xóa phần tử đầu tiên và 1 để xóa phần tử cuối cùng của mảng

Giả sử, chúng tôi có một bộ sưu tập được gọi là kiểm tra với các tài liệu sau

db.test.insertMany([
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L", "XL" ] },
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] },
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
])

Truy vấn sau sẽ loại bỏ phần tử đầu tiên của mảng trong tài liệu 3

db.test.update( 
  { _id: 3 }, 
  { $pop: { sizes: -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()

________số 8

Chúng tôi đã xóa thành công phần tử đầu tiên khỏi mảng trong tài liệu 3

  • Cách thay đổi tên bộ sưu tập trong MongoDB

MongoDB xóa một phần tử khỏi mảng theo id

Trong chủ đề này, chúng ta sẽ học cách xóa một phần tử khỏi mảng theo id. Ở đây, mảng theo id có nghĩa là loại bỏ một phần tử mảng id cụ thể. Chúng ta sẽ sử dụng toán tử $pull trong phương thức update() để xóa phần tử khỏi mảng. Hãy để chúng tôi hiểu với sự giúp đỡ của một ví dụ

Ví dụ

Các tài liệu tiếp theo đã được chèn vào bộ sưu tập cửa hàng

db.store.insertMany([
{
   _id: 1,
   fruits: [ "apples", "pears", "oranges", "grapes", "bananas" ],
   vegetables: [ "carrots", "celery", "squash", "carrots" ],
   city: ["USA", "UK", "Australia"]
},
{
   _id: 2,
   fruits: [ "plums", "kiwis", "oranges", "bananas", "apples" ],
   vegetables: [ "broccoli", "zucchini", "carrots", "onions" ],
   city: ["Canada", "United States", "New Zealand"]
}
])

Sau đó, chúng ta sẽ áp dụng truy vấn sau để xóa một phần tử khỏi mảng

db.products.update( 
  { _id: 1 }, 
  { $pull: { sizes: "XXL" } } 
)
0

Ở đây, chúng tôi đã chỉ định id 2 vì vậy trong id 2, toán tử $pull sẽ loại bỏ táo và cam khỏi mảng trái cây và loại bỏ cà rốt khỏi mảng rau củ

MongoDB kéo đối tượng lồng nhau
MongoDB kéo đối tượng lồng nhau
MongoDB xóa một phần tử khỏi mảng

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()

db.products.update( 
  { _id: 1 }, 
  { $pull: { sizes: "XXL" } } 
)
1

Đọc MongoDB tìm tài liệu được chèn lần cuối

MongoDB xóa một phần tử khỏi chỉ mục mảng

Không có cách chính xác để kéo hoặc loại bỏ một phần tử theo chỉ số mảng. Đây là một vấn đề mở http. //jira. mongodb. org/duyệt/SERVER-1014

Lỗ hổng đang sử dụng $unset và sau đó là $pull

db.products.update( 
  { _id: 1 }, 
  { $pull: { sizes: "XXL" } } 
)
2

Cập nhật. Cách tiếp cận này không phải là nguyên tử và có thể gây ra một số loại điều kiện nếu các máy khách khác đọc và/hoặc ghi giữa hai thao tác. Nếu chúng ta muốn hoạt động là nguyên tử, chúng ta có thể

  • Đọc tài liệu từ cơ sở dữ liệu
  • Cập nhật tài liệu và xóa mục trong mảng
  • Thay thế tài liệu trong cơ sở dữ liệu.  

Nếu bạn sử dụng phương pháp trên để loại bỏ một phần tử mảng theo chỉ mục của nó thì cách này hoạt động

Ví dụ

Tài liệu sau đây đã được chèn vào bộ sưu tập thông tin

db.products.update( 
  { _id: 1 }, 
  { $pull: { sizes: "XXL" } } 
)
3

Bây giờ, chúng ta sẽ áp dụng hai truy vấn để loại bỏ một phần tử mảng theo chỉ số của nó

Bước 1. Áp dụng toán tử $unset để đặt giá trị null tại vị trí của “YourIndexValue”

db.products.update( 
  { _id: 1 }, 
  { $pull: { sizes: "XXL" } } 
)
4

Hãy để chúng tôi thực hiện truy vấn dưới đây

db.products.update( 
  { _id: 1 }, 
  { $pull: { sizes: "XXL" } } 
)
5

Bước 2. Toán tử $pull được sử dụng để lấy giá trị null từ mảng để xóa nó khỏi phần tử mảng

db.products.update( 
  { _id: 1 }, 
  { $pull: { sizes: "XXL" } } 
)
6

Hãy để chúng tôi thực hiện truy vấn dưới đây

db.products.update( 
  { _id: 1 }, 
  { $pull: { sizes: "XXL" } } 
)
7

Sau đó kiểm tra phần tử mảng “Java” đã bị xóa hay chưa. Truy vấn như sau

db.products.update( 
  { _id: 1 }, 
  { $pull: { sizes: "XXL" } } 
)
8

MongoDB kéo đối tượng lồng nhau
MongoDB kéo đối tượng lồng nhau
MongoDB xóa một phần tử khỏi chỉ mục mảng

Nhìn vào kết quả, chúng ta đã loại bỏ thành công phần tử mảng “Java”

Đọc thứ tự MongoDB theo ngày

MongoDB xóa phần tử cuối cùng khỏi mảng

Trong chủ đề này, bạn sẽ học cách xóa phần tử cuối cùng khỏi mảng. Để làm được điều đó, chúng ta sẽ sử dụng toán tử $pop để xóa phần tử cuối cùng khỏi mảng. Nó cung cấp giá trị -1 để xóa phần tử đầu tiên và 1 để xóa phần tử cuối cùng của mảng

Vì vậy, ở đây, chúng ta sẽ sử dụng 1 để loại bỏ phần tử cuối cùng của một mảng. Hãy hiểu với sự giúp đỡ của một ví dụ

Ví dụ

Các tài liệu sau đã được chèn vào bộ sưu tập cửa hàng

db.products.update( 
  { _id: 1 }, 
  { $pull: { sizes: "XXL" } } 
)
9

Bây giờ, chúng ta sẽ áp dụng truy vấn dưới đây để xóa phần tử cuối cùng khỏi mảng

db.product.find()
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
0

Ở đây, chúng tôi đã áp dụng toán tử $pop với giá trị 1 để xóa phần tử cuối cùng khỏi tài liệu 1 mảng fruit

Sau đó, kiểm tra phần tử mảng để lấy tất cả các tài liệu bằng cách sử dụng phương thức find()

db.product.find()
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
1

MongoDB kéo đối tượng lồng nhau
MongoDB kéo đối tượng lồng nhau
MongoDB xóa phần tử cuối cùng khỏi mảng

Chúng tôi đã loại bỏ thành công phần tử mảng cuối cùng “nho” khỏi trường trái cây trong tài liệu 1

Đọc MongoDB tìm chuỗi chứa

MongoDB xóa một phần tử khỏi một mảng lồng nhau

Trong chủ đề này, chúng ta sẽ học cách xóa một phần tử khỏi mảng lồng nhau. Chúng ta sẽ sử dụng toán tử $pull để xóa phần tử khỏi mảng lồng nhau. Hãy để chúng tôi hiểu với sự giúp đỡ của một ví dụ

Ví dụ

Các tài liệu sau đây đã được đưa vào bộ sưu tập hàng tồn kho

db.product.find()
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
2

Bây giờ, chúng ta sẽ áp dụng truy vấn bên dưới để xóa một phần tử khỏi mảng lồng nhau

db.product.find()
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
3

Sau đó, lấy tất cả các tài liệu bằng phương thức find()

db.product.find()
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
4

MongoDB kéo đối tượng lồng nhau
MongoDB kéo đối tượng lồng nhau
MongoDB xóa một phần tử khỏi một mảng lồng nhau

Chúng tôi đã xóa thành công phần tử khỏi mảng lồng nhau

Đọc MongoDB tìm nhiều giá trị

MongoDB xóa nhiều phần tử khỏi mảng

Trong chủ đề này, bạn sẽ học cách loại bỏ nhiều phần tử khỏi mảng. Chúng ta sẽ sử dụng toán tử $pullAll để loại bỏ nhiều phần tử khỏi mảng. Hãy để chúng tôi hiểu với sự giúp đỡ của một ví dụ

Ví dụ

Các tài liệu sau đây đã được đưa vào bộ sưu tập sinh viên

db.product.find()
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
5

Bây giờ, chúng tôi sẽ áp dụng truy vấn bên dưới để xóa nhiều phần tử khỏi trường thành tích của mảng trong id 1

db.product.find()
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
6

MongoDB kéo đối tượng lồng nhau
MongoDB kéo đối tượng lồng nhau
MongoDB xóa nhiều phần tử khỏi mảng

Chúng tôi đã xóa thành công nhiều phần tử khỏi trường đạt được mảng trong đó id là 2

Bạn cũng có thể thích các hướng dẫn MongoDB sau đây

  • Tìm kiếm văn bản MongoDB một phần từ
  • MongoDB xóa một trường khỏi tài liệu
  • MongoDB Auto Increment ID
  • Tạo chỉ mục trong MongoDB
  • Hiển thị dữ liệu MongoDB trong HTML
  • Thiếu câu lệnh trước MongoDB

Vì vậy, trong hướng dẫn này, chúng ta đã học “MongoDB xóa một phần tử khỏi mảng” bằng các cách tiếp cận khác nhau với các ví dụ. Đây là những chủ đề sau mà chúng tôi đã đề cập trong hướng dẫn này

  • MongoDB xóa một phần tử khỏi truy vấn mảng
  • MongoDB xóa một phần tử khỏi mảng theo id
  • MongoDB xóa một phần tử khỏi chỉ mục mảng
  • MongoDB xóa phần tử cuối cùng khỏi mảng
  • MongoDB xóa một phần tử khỏi một mảng lồng nhau
  • MongoDB xóa nhiều phần tử khỏi mảng

MongoDB kéo đối tượng lồng nhau

Bijay

Tôi là Bijay có hơn 15 năm kinh nghiệm trong ngành công nghiệp phần mềm. Trong thời gian này, tôi đã làm việc trên MariaDB và sử dụng nó trong rất nhiều dự án. Hầu hết độc giả của chúng tôi đến từ Hoa Kỳ, Canada, Vương quốc Anh, Úc, New Zealand, v.v.

Bạn muốn tìm hiểu MariaDB? . Ngoài ra, tôi là MVP của Microsoft

Làm cách nào để lấy dữ liệu từ đối tượng lồng nhau trong MongoDB?

Truy cập tài liệu nhúng/lồng nhau – . using dot notation and when you are using dot notation, then the field and the nested field must be inside the quotation marks.

Làm cách nào để sử dụng $push trong MongoDB?

Nếu trường không có trong tài liệu cần cập nhật, $push sẽ thêm trường mảng có giá trị làm thành phần 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ẽ thêm toàn bộ mảng dưới dạng một phần tử. Để thêm riêng từng phần tử của giá trị, hãy sử dụng công cụ sửa đổi $each với $push.

Làm cách nào để xóa dữ liệu khỏi mảng lồng nhau trong MongoDB?

$pull sẽ xóa giá trị đã chỉ định khỏi mảng . Trong trường hợp bạn không chắc mình muốn xóa giá trị cụ thể nào khỏi mảng mà chỉ muốn xóa giá trị đầu hoặc cuối trong mảng thì có thể sử dụng toán tử $pop.

Làm cách nào để sử dụng $set trong MongoDB?

Toán tử $set thay thế giá trị của một trường bằng giá trị đã chỉ định . Biểu thức toán tử $set có dạng như sau. { $set. {