Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Cách xóa tất cả phần tử trong trường mảng MongoDB

Để xóa tất cả phần tử trong một trường mảng (làm rỗng mảng) trong MongoDB, bạn sử dụng $set gán mảng rỗng [].

Cú pháp

db.yourCollectionName.update(
    {},                              // query - rỗng = tất cả document
    { $set: { "yourArrayField": [] } },
    { multi: true }                  // cập nhật nhiều document
);

Ví dụ minh họa

Tạo collection và dữ liệu

> db.deleteAllElementsInArrayDemo.insertOne({"InstructorName":"Larry","InstructorTechnicalSubject":["Java","MongoDB"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c8fb971d3c9d04998abf00e") }
> db.deleteAllElementsInArrayDemo.insertOne({"InstructorName":"Mike","InstructorTechnicalSubject":["C","C++","Python"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c8fb98ad3c9d04998abf00f") }

Xem dữ liệu ban đầu

> db.deleteAllElementsInArrayDemo.find().pretty();
{
    "_id" : ObjectId("5c8fb971d3c9d04998abf00e"),
    "InstructorName" : "Larry",
    "InstructorTechnicalSubject" : [ "Java", "MongoDB" ]
}
{
    "_id" : ObjectId("5c8fb98ad3c9d04998abf00f"),
    "InstructorName" : "Mike",
    "InstructorTechnicalSubject" : [ "C", "C++", "Python" ]
}

Xóa tất cả phần tử mảng InstructorTechnicalSubject

> db.deleteAllElementsInArrayDemo.update(
    {}, 
    { $set: { "InstructorTechnicalSubject": [] } }, 
    { multi: true }
);
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

Kiểm tra kết quả

> db.deleteAllElementsInArrayDemo.find().pretty();
{
    "_id" : ObjectId("5c8fb971d3c9d04998abf00e"),
    "InstructorName" : "Larry",
    "InstructorTechnicalSubject" : [ ]
}
{
    "_id" : ObjectId("5c8fb98ad3c9d04998abf00f"),
    "InstructorName" : "Mike",
    "InstructorTechnicalSubject" : [ ]
}

Cả 2 document đều có mảng InstructorTechnicalSubject rỗng [].

Phương pháp hiện đại (MongoDB 3.2+)

Khuyến khích dùng updateMany():

db.deleteAllElementsInArrayDemo.updateMany(
    {},
    { $set: { "InstructorTechnicalSubject": [] } }
);

So sánh các cách xóa mảng

Phương phápCú phápKết quảLưu ý
$set: {arr: []}Gán mảng rỗngMảng rỗng []Nhanh, đơn giản
$unset: {arr: 1}Xóa trườngTrường biến mấtDocument không còn trường đó
$pull: {arr: {$exists: true}}Pull tất cảMảng rỗng []Chậm hơn, không cần thiết
$set: {arr: null}Gán nullTrường = nullKhác mảng rỗng

Xóa mảng cho document cụ thể

// Chỉ document có InstructorName = "Larry"
db.deleteAllElementsInArrayDemo.updateOne(
    { "InstructorName": "Larry" },
    { $set: { "InstructorTechnicalSubject": [] } }
);

Lưu ý

  • multi: true (hoặc updateMany) cần thiết để áp dụng cho tất cả document khớp query
  • Mảng rỗng [] khác với null và khác với trường không tồn tại
  • Index trên trường mảng vẫn được giữ nguyên