Computer >> Máy Tính >  >> Lập trình >> MongoDB

Làm cách nào để xóa một phần tử mảng theo chỉ mục của nó trong MongoDB?

Bạn có thể xóa một phần tử mảng theo chỉ mục của nó bằng hai bước sau -

Bước đầu tiên như sau -

db.yourCollectionName.update({}, {$unset : {"yourArrayFieldName.yourIndexValue" : 1 }});

Cú pháp trên sẽ đặt giá trị null tại vị trí của ‘yourIndexValue’. Sau đó, bạn cần kéo giá trị null từ mảng được sắp xếp để loại bỏ khỏi một phần tử của mảng.

Bước thứ hai như sau -

db.yourCollectionName.update({}, {$pull : {"yourArrayFieldName" : null}});

Để triển khai cú pháp, chúng ta hãy tạo một bộ sưu tập với tài liệu. Truy vấn để tạo một bộ sưu tập với một tài liệu như sau -

> db.removeArrayElementByItsIndexDemo.insertOne({"InstructorName":"David",
   "InstructorAge":28,"InstructorSubject":["MongoDB","MySQL","Java","SQL Server","PL/SQL"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8abbfc6cea1f28b7aa0803")
}

Hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find (). Truy vấn như sau -

> db.removeArrayElementByItsIndexDemo.find().pretty();

Sau đây là kết quả -

{
   "_id" : ObjectId("5c8abbfc6cea1f28b7aa0803"),
   "InstructorName" : "David",
   "InstructorAge" : 28,
   "InstructorSubject" : [
      "MongoDB",
      "MySQL",
      "Java",
      "SQL Server",
      "PL/SQL"
   ]
}

Đây là truy vấn để loại bỏ một phần tử mảng theo chỉ mục của nó.

Bước 1 - Truy vấn như sau -

> db.removeArrayElementByItsIndexDemo.update({}, {$unset : {"InstructorSubject.2" : 1 }});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Bước 2 - Truy vấn như sau -

> db.removeArrayElementByItsIndexDemo.update({}, {$pull : {"InstructorSubject" : null}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Hãy để chúng tôi kiểm tra phần tử mảng “Java” đã bị loại bỏ hay chưa. Truy vấn như sau -

> db.removeArrayElementByItsIndexDemo.find().pretty();

Sau đây là kết quả -

{
   "_id" : ObjectId("5c8abbfc6cea1f28b7aa0803"),
   "InstructorName" : "David",
   "InstructorAge" : 28,
   "InstructorSubject" : [
      "MongoDB",
      "MySQL",
      "SQL Server",
      "PL/SQL"
   ]
}

Nhìn vào kết quả đầu ra mẫu, phần tử mảng “Java” đã bị xóa hoàn toàn.