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

Cập nhật trạng thái server thành Inactive trong collection MongoDB

Sử dụng toán tử vị trí $ kết hợp với $set để cập nhật phần tử cụ thể trong mảng lồng nhau. Tạo collection với dữ liệu server:

> db.demo707.insertOne({
...   id:101,
...   "serverInformation": [
...     { "IP":"192.56.34.3", "Status":"Active" },
...     { "IP":"192.56.36.4", "Status":"Inactive" }
...   ]
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5ea6f852551299a9f98c93c8") }

Hiển thị dữ liệu ban đầu:

> db.demo707.find();
{ "_id" : ObjectId("5ea6f852551299a9f98c93c8"), "id" : 101, "serverInformation" : [ { "IP" : "192.56.34.3", "Status" : "Active" }, { "IP" : "192.56.36.4", "Status" : "Inactive" } ] }

Cập nhật server có IP "192.56.34.3" từ Active sang Inactive:

> db.demo707.update(
...   {"serverInformation.IP":"192.56.34.3"},
...   {$set:{"serverInformation.$.Status":"Inactive"}}
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Kiểm tra kết quả:

> db.demo707.find();
{ "_id" : ObjectId("5ea6f852551299a9f98c93c8"), "id" : 101, "serverInformation" : [ { "IP" : "192.56.34.3", "Status" : "Inactive" }, { "IP" : "192.56.36.4", "Status" : "Inactive" } ] }

Giải thích: Toán tử $ tham chiếu đến phần tử đầu tiên trong mảng khớp với điều kiện truy vấn, cho phép cập nhật chính xác phần tử đó mà không ảnh hưởng phần tử khác.