MongoDB cung cấp một số toán tử cho phép bạn xóa giá trị khỏi mảng.
Chúng bao gồm:
-
$pull
-
$pullAll
-
$pop
$pull
Nhà điều hành
$pull
toán tử loại bỏ khỏi một mảng hiện có tất cả các trường hợp của một giá trị hoặc các giá trị phù hợp với một điều kiện được chỉ định.
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", "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 trong tài liệu 1 như sau:
db.products.update(
{ _id: 1 },
{ $pull: { sizes: "XXL" } }
)
Bây giờ khi chúng tôi kiểm tra bộ sưu tập, chúng tôi có thể thấy rằng XXL
đã bị xóa khỏi tài liệu 1 như được chỉ định:
db.products.find()
Kết quả:
{ "_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" ] }
$pullAll
Nhà điều hành
$pullAll
toán tử loại bỏ tất cả các trường hợp của các giá trị được chỉ định khỏi mảng.
Giả sử chúng ta có một bộ sưu tập với các tài liệu sau:
{ "_id" : 1, "bar" : [ 1, 7, 2, 3, 8, 7, 1 ] } { "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] } { "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }
Và chúng tôi muốn xóa tất cả các giá trị của 7
từ mảng trong tài liệu 1.
Chúng tôi có thể làm điều này:
db.foo.update(
{ _id: 1 },
{ $pullAll: { bar: [ 7 ] } }
)
Điều này loại bỏ cả hai lần xuất hiện của 7 khỏi mảng trong tài liệu 1.
Chúng tôi có thể xác minh điều này bằng cách kiểm tra bộ sưu tập:
db.foo.find()
Kết quả:
{ "_id" : 1, "bar" : [ 1, 2, 3, 8, 1 ] } { "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] } { "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }
Chúng ta có thể thấy rằng mảng trong tài liệu 1 đã có tất cả 7
các giá trị đã bị xóa như đã chỉ định.
Trong khi $pullAll
tương tự như $pull
, sự khác biệt là $pullAll
loại bỏ các phần tử phù hợp với các giá trị được liệt kê. Điều này không giống như $pull
, nơi bạn xóa các giá trị bằng cách chỉ định một truy vấn.
$pop
Nhà điều hành
$pop
toán tử loại bỏ phần tử đầu tiên hoặc cuối cùng của một mảng.
Cung cấp giá trị -1
để xóa phần tử đầu tiên và 1
để loại bỏ cuối cùng.
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" : [ "M", "L", "XL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }
Đoạn mã sau xóa phần tử cuối cùng khỏi mảng trong tài liệu 1:
db.products.update(
{ _id: 2 },
{ $pop: { sizes: 1 } }
)
Chúng tôi có thể xác minh điều này bằng cách kiểm tra 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" ] }