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

Xóa bản ghi cụ thể từ mảng lồng trong mảng khác MongoDB

Để xóa bản ghi cụ thể từ mảng lồng sâu, sử dụng $pull với positional operator. Tạo collection:

> db.demo213.insertOne({
   "id": 101,
   "details1": [
      {
         "Name": "Chris",
         "details2": [
            { "StudentName": "David", "Subject": "MongoDB" },
            { "StudentName": "Mike", "Subject": "MySQL" }
         ]
      }
   ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3e300c03d395bdc2134704") }

Hiển thị tài liệu:

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

Kết quả:

Xóa phần tử trong details2 có Subject="MySQL" nơi details1.Name="Chris":

> db.demo213.update(
   { "id": 101, "details1.Name": "Chris" },
   { "$pull": { "details1.$.details2": { "Subject": "MySQL" } } },
   { multi: true }
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Kết quả sau xóa - chỉ còn David/MongoDB:

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

Cơ chế: details1.$.details2 dùng positional operator $ để trỏ đến phần tử details1 khớp điều kiện (Name="Chris"), sau đó $pull xóa phần tử khớp trong details2.