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

Cách tìm và sửa đổi giá trị trong mảng lồng nhau MongoDB?

Để tìm và sửa đổi giá trị trong mảng lồng nhau (nested array), bạn sử dụng lệnh update kết hợp với toán tử $elemMatch để xác định element cần cập nhật và $set với toán tử vị trí ($) để thay đổi giá trị.

Tạo dữ liệu mẫu

> db.findAndModifyAValueInNestedArrayDemo.insertOne( {
  "CompanyName" : "Amazon", 
  "DeveloperDetails" : [ 
    { "ProjectName" : "Online Book Store", "TeamSize" : "5" },
    { "ProjectName" : "Library Management System", "TeamSize" : "7" },
    { "ProjectName" : "Online Banking Application", "TeamSize" : "15" }
  ]
} );
{ "acknowledged" : true, "insertedId" : ObjectId("5ca275226304881c5ce84b9f") }

Hiển thị document:

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

Kết quả:

{ "_id" : ObjectId("5ca275226304881c5ce84b9f"), "CompanyName" : "Amazon", 
  "DeveloperDetails" : [ 
    { "ProjectName" : "Online Book Store", "TeamSize" : "5" },
    { "ProjectName" : "Library Management System", "TeamSize" : "7" },
    { "ProjectName" : "Online Banking Application", "TeamSize" : "15" }
  ] }

Cập nhật giá trị trong mảng lồng nhau

Sửa TeamSize thành "20" cho project "Online Banking Application":

> db.findAndModifyAValueInNestedArrayDemo.update( 
  { DeveloperDetails: { $elemMatch: { ProjectName: "Online Banking Application" } } }, 
  { $set: { 'DeveloperDetails.$.TeamSize': '20' } } 
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Giải thích:

  • $elemMatch: Khớp element trong mảng thỏa mãn điều kiện
  • $ (positional operator): Tham chiếu đến element đầu tiên khớp với $elemMatch
  • $set: Cập nhật trường cụ thể của element đó

Kiểm tra kết quả:

> db.findAndModifyAValueInNestedArrayDemo.find().pretty();
{ "_id" : ObjectId("5ca275226304881c5ce84b9f"), "CompanyName" : "Amazon", 
  "DeveloperDetails" : [ 
    { "ProjectName" : "Online Book Store", "TeamSize" : "5" },
    { "ProjectName" : "Library Management System", "TeamSize" : "7" },
    { "ProjectName" : "Online Banking Application", "TeamSize" : "20" }
  ] }

Chỉ element khớp điều kiện được cập nhật, các element khác giữ nguyên.