Trong MongoDB, bạn có thể sử dụng $unset
toán tử cập nhật trường để xóa hoàn toàn một trường khỏi tài liệu.
$unset
toán tử được thiết kế đặc biệt để xóa một trường và giá trị của nó khỏi tài liệu.
Ví dụ
Giả sử chúng ta có một bộ sưu tập có tên là dogs
với các tài liệu sau:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 6, "name" : "Fetch", "type" : "Dog", "weight" : 17 } { "_id" : 7, "name" : "Jake", "type" : "Dog", "weight" : 30 }
Và giả sử chúng ta muốn loại bỏ type
trường (và giá trị tương ứng của nó) từ tất cả các tài liệu.
Chúng tôi có thể làm điều này:
db.dogs.updateMany(
{ },
{ $unset: { type: "" } }
)
Đầu ra:
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 }
Điều này cho chúng tôi biết rằng bốn tài liệu đã khớp (vì chúng tôi đã sử dụng một tài liệu truy vấn trống làm đối số đầu tiên) và bốn tài liệu đã được cập nhật.
Bây giờ chúng ta hãy kiểm tra lại bộ sưu tập:
db.dogs.find()
Kết quả:
{ "_id" : 1, "name" : "Wag", "weight" : 20 } { "_id" : 2, "name" : "Bark", "weight" : 10 } { "_id" : 6, "name" : "Fetch", "weight" : 17 } { "_id" : 7, "name" : "Jake", "weight" : 30 }
Chúng ta có thể thấy rằng type
trường đã bị xóa hoàn toàn khỏi mỗi tài liệu.
Lưu ý rằng giá trị được chỉ định trong $unset
biểu thức (tức là “”) không ảnh hưởng đến hoạt động.
Xóa nhiều trường
Bạn có thể chỉ định nhiều trường để xóa bằng cách phân tách chúng bằng dấu phẩy.
Ví dụ:
db.dogs.updateMany(
{ },
{ $unset: { name: "", weight: "" } }
)
Đầu ra:
{ "acknowledged" : true, "matchedCount" : 4, "modifiedCount" : 4 }
Kiểm tra bộ sưu tập:
db.dogs.find()
Kết quả:
{ "_id" : 1 } { "_id" : 2 } { "_id" : 6 } { "_id" : 7 }
Bây giờ chỉ có _id
các trường còn lại.
Tài liệu được nhúng
Bạn có thể sử dụng ký hiệu dấu chấm để xóa các trường khỏi tài liệu nhúng.
Giả sử chúng ta có một bộ sưu tập có tên là pets
với tài liệu sau:
{ "_id" : 1, "name" : "Wag", "details" : { "type" : "Dog", "weight" : 20, "awards" : { "Florida Dog Awards" : "Top Dog", "New York Marathon" : "Fastest Dog", "Sumo 2020" : "Biggest Dog" } } }
Và giả sử chúng tôi muốn xóa awards
trường từ tài liệu.
Chúng tôi có thể làm điều này:
db.pets.updateMany(
{ _id: 1 },
{ $unset: { "details.awards": "" } }
)
Đầu ra:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
Bây giờ chúng ta hãy kiểm tra tài liệu:
db.pets.findOne()
Kết quả:
{ "_id" : 1, "name" : "Wag", "details" : { "type" : "Dog", "weight" : 20 } }
awards
trường và giá trị của nó (bản thân nó là một tài liệu được nhúng) đã bị xóa khỏi tài liệu.