Trong MongoDB, bạn có thể sử dụng $pop
toán tử để xóa phần tử đầu tiên hoặc cuối cùng khỏi một mảng.
Sử dụng $pop
kết hợp với một phương thức như update()
để cập nhật tài liệu được chỉ định với sự thay đổi.
Sử dụng -1
để xóa phần tử đầu tiên và 1
để loại bỏ cuối cùng.
Ví dụ
Giả sử chúng ta có một bộ sưu tập được gọi là products
với các tài liệu sau:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Xóa phần tử đầu tiên
Chúng ta có thể xóa phần tử đầu tiên của mảng trong tài liệu 1 như sau:
db.products.update(
{ _id: 1 },
{ $pop: { sizes: -1 } }
)
Đầu ra:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Thông báo đó cho chúng tôi biết rằng một tài liệu đã khớp và một tài liệu (tức là cùng một tài liệu) đã được sửa đổi.
Bây giờ chúng ta hãy xem bộ sưu tập:
db.products.find()
Kết quả:
{ "_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" ] }
Chúng ta có thể thấy rằng phần tử đầu tiên của mảng trong tài liệu 1 đã bị xóa.
Xóa phần tử cuối cùng
Bây giờ chúng ta hãy xóa phần tử cuối cùng khỏi mảng trong tài liệu 2:
db.products.update(
{ _id: 2 },
{ $pop: { sizes: 1 } }
)
Đầu ra:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Bây giờ chúng ta hãy kiểm tra lại bộ sưu tập:
db.products.find()
Kết quả:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Chúng ta có thể thấy rằng phần tử cuối cùng đã bị xóa khỏi mảng trong tài liệu 2.
Cập nhật tất cả tài liệu
Đây là một ví dụ sử dụng updateMany()
phương pháp cập nhật tất cả các tài liệu:
db.products.updateMany(
{ },
{ $pop: { sizes: 1 } }
)
Đầu ra:
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }
Và kiểm tra lại bộ sưu tập:
db.products.find()
Kết quả:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M" ] }
Ngoài ra, bạn có thể sử dụng update()
phương pháp cập nhật nhiều tài liệu bằng cách chỉ định multi: true
.