Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài 10: Update dữ liệu trong MongoDB

Tiếp tục với series phần này chúng ta sẽ tìm hiểu về các update một hoặc nhiều bản ghi trong MongoDB.

1, Sửa đổi một bản ghi trong MongoDB.

-Để sửa đổi một bản ghi duy nhất trong MongoDB thì các bạn sử dụng phương thức updateOne() theo cú pháp sau:

db.collectionName.updateOne(
    filter,
    update,
    {
        upsert: <boolean>,
        writeConcern: <document>
        collation: <document>,
    }
)

Trong đó:

  • filter là một object chứa các tiêu chí lựa chọn bản ghi update (sử dụng cú pháp selector).
  • update là object chứa dữ liệu sửa đổi trên bản ghi.
  • upsert là một boolean cấu hình điều gì sẽ xảy ra khi không có bản khi khớp với filter. Nếu upsert = true thì nó sẽ thêm mới bản ghi đó nếu không có bản ghi nào khớp với filter và sẽ không có điều gì xảy ra nếu upsert = false. Mặc định thì upsert = false.
  • writeConcern là một document chứa write concern.
  • collation là một document chứa các quy tắc.

Lưu ý: Khi sử dụng phương thức updateOne() nếu như dữ liệu khớp với filter nhiều hơn một bản ghi thì nó sẽ chỉ sửa đổi cho một bản ghi đầu tiên.

VD1: Sửa name của admin có tuổi = 18 thành Toidicode.

db.admin.updateOne(
    {age: 18},
    {
        $set: {
            name: "Toidicode"
        }
    }
)

updateone trong MongoDB

Hình minh họa

2,  Sửa đổi nhiều bản ghi trong MongoDB.

-Để sửa nhiều bản ghi trên một lần khai báo trong MongoDB thì mọi người sử dụng phương thức updateMany() với cú pháp tương tự như Phương thức updateOne():

db.collectionName.updateOne(
    filter,
    update,
    {
        upsert: <boolean>,
        writeConcern: <document>
        collation: <document>,
    }
)

Trong đó:

  • filter là một object chứa các tiêu chí lựa chọn bản ghi update (sử dụng cú pháp selector).
  • update là object chứa dữ liệu sửa đổi trên bản ghi.
  • upsert là một boolean cấu hình điều gì sẽ xảy ra khi không có bản khi khớp với filter. Nếu upsert = true thì nó sẽ thêm mới bản ghi đó nếu không có bản ghi nào khớp với filter và sẽ không có điều gì xảy ra nếu upsert = false. Mặc định thì upsert = false.
  • writeConcern là một document chứa write concern.
  • collation là một document chứa các quy tắc.

-Lưu ý: Phương thức này chỉ khác với phương thức updateOne() ở chỗ: Nếu như số lượng bản ghi so khớp với filter lớn hơn 1 bản ghi thì nó sẽ sửa dữ liệu trên tất cả các bản ghi đó.

VD2: Sửa name của admin có name = "Vu Thanh Tai" thành Toidicode.

db.admin.updateMany(
    {name: "Vu Thanh Tai"},
    {
        $set: {
            name: "Toidicode"
        }
    }
)

Update Many trong MongoDB

Hình minh họa

3, Sửa đổi bản ghi trong MongoDB.

-Ngoài 2 phương thức trên thì trong MongoDB còn cung cấp cho chúng ta một phương thức update() có thể cấu hình updateOne() hoặc updateMany(), sử dụng theo cú pháp sau:

db.collection.update(
   filter,
   update,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>,
     collation: <document>
   }
)

Trong đó:

  • filter là một object chứa các tiêu chí lựa chọn bản ghi update (sử dụng cú pháp selector).
  • update là object chứa dữ liệu sửa đổi trên bản ghi.
  • upsert là một boolean cấu hình điều gì sẽ xảy ra khi không có bản khi khớp với filter. Nếu upsert = true thì nó sẽ thêm mới bản ghi đó nếu không có bản ghi nào khớp với filter và sẽ không có điều gì xảy ra nếu upsert = false. Mặc định thì upsert = false.
  • multi là một boolean cấu hình xem có cho phép sửa đổi nhiều bản ghi hay không, multi bằng true là cho phép và ngược lại bằng false thì là không. Mặc định thì thuộc tính này có giá trị là false.
  • writeConcern là một document chứa write concern.
  • collation là một document chứa các quy tắc.

VD3: Sửa đổi name của một bản ghi duy nhất có name là "Toidicode" thành "Vu Thanh Tai".

db.admin.updateOne(
    {name: "Vu Thanh Tai"},
    {
        $set: {
            name: "Toidicode"
        }
    },
    {
        multi : false
    }
)

Update document trong MongoDB

Hình minh họa

4, Lời kết.

-Như vậy phần này mình đã hướng dẫn đến mọi người 3 cách để sửa đổi dữ liệu trong collection rồi, bài tiếp theo chúng ta sẽ tìm hiểu về các cách xóa dữ liệu trong collection.

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

3 Comments

anh Vũ Thanh Tài ơi cảm ơn bài viết rất hay của anh. Nhưng có vấn đề này em mong anh giúp. Anh chỉ em cách update các trường con ở trong document với  em update các trường cấp 1 của document thì được các trường con ở sâu trong document thì chưa biết cách update. 

Ví dụ: có Document như sau:

{
    "_id" : ObjectId("5ab35d987d807b5dfebeffc6"),
    "SBD" : "A01001",
    "TG_ConLai" : 2280,
    "DaNopBai" : 0,
    "Diem" : 0.0,
    "DeThi" : [ 
        {
            "idcauhoi" : 1,
            "noidung_cauhoi" : "1+2=?",
            "phuongan_tl" : [ 
                1, 
                2, 
                3, 
                4, 
                5
            ],
            "dapan" : 3,
            "ts_tl" : 1
        }, 
        {
            "idcauhoi" : 2,
            "noidung_cauhoi" : "2+2=?",
            "phuongan_tl" : [ 
                1, 
                2, 
                3, 
                4, 
                5
            ],
            "dapan" : 4,
            "ts_tl" : 2
        }
    ]
}

Em muốn update trường ts_tl có idcauhoi là 1 thành 3 thì điều kiện và cách update như thế nào. Mong anh hướng dẫn. Thanks

Trần Trung Dũng

6 năm trước

Cảm ơn bạn đã góp ý!
Trong trường hợp này bạn tham khảo phương thức replaceOne() nhé!
LInk : https://docs.mongodb.com/manual/reference/method/db.collection.replaceOne/index.html

Vũ Thanh Tài

6 năm trước

Xem thêm về arrayFilters

https://docs.mongodb.com/manual/reference/method/db.collection.update/#db.collection.update

Bùi Thanh Hải

6 năm trước

Bình luận

Captcha