Sử dụng update()
phương thức hoặc save()
phương pháp cập nhật tài liệu trong MongoDB.
Trong MongoDB, cả update()
và save()
có thể được sử dụng để cập nhật một tài liệu.
update()
phương thức cập nhật các giá trị trong một tài liệu hoặc các tài liệu hiện có, trong khi save()
phương thức thay thế một tài liệu bằng tài liệu được truyền vào dưới dạng một tham số.
Tuy nhiên, update()
phương thức cũng có thể thay thế toàn bộ tài liệu, tùy thuộc vào tham số được truyền vào.
update()
Phương pháp
Đây là một ví dụ về update()
phương pháp.
Đầu tiên, hãy chọn một bản ghi để cập nhật:
db.musicians.find({ _id: 6 }).pretty()
Kết quả:
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
Jeff thực sự làm được nhiều điều hơn là chỉ hát. Vì vậy, chúng ta hãy thêm một số công cụ khác. Chúng tôi sẽ sử dụng $set
toán tử để cập nhật một trường.
db.musicians.update( { _id: 6 }, { $set:{ instrument : [ "Vocals", "Guitar", "Sitar" ] } } )
Kết quả:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Bây giờ nếu chúng tôi thực hiện một truy vấn khác, chúng tôi thấy rằng tài liệu đã được cập nhật như đã chỉ định:
db.musicians.find({ _id: 6 }).pretty()
Kết quả:
{ "_id" : 6, "name" : "Jeff Martin", "instrument" : [ "Vocals", "Guitar", "Sitar" ], "born" : 1969 }
Một số tùy chọn khác:
- Nếu trường không tồn tại,
$set
toán tử sẽ thêm một trường mới với giá trị được chỉ định, với điều kiện là trường mới không vi phạm ràng buộc về kiểu. - Bạn cũng có thể sử dụng
{ upsert: true }
để tạo tài liệu mới khi không có tài liệu nào phù hợp với truy vấn. - Bạn có thể sử dụng
{ multi: true }
để cập nhật nhiều tài liệu đáp ứng tiêu chí truy vấn. Theo mặc định, tùy chọn này được đặt thànhfalse
, vì vậy chỉ một tài liệu được cập nhật nếu bạn không đặt nó thànhtrue
.
save()
Phương pháp
save()
phương thức là sự kết hợp giữa update()
và insert()
. Khi bạn sử dụng save()
, nếu tài liệu tồn tại, nó sẽ được cập nhật. Nếu nó không tồn tại, nó sẽ được tạo.
Nếu bạn không chỉ định _id
, MongoDB sẽ tạo một tài liệu có _id
có chứa ObjectId
giá trị (theo một insert()
).
Nếu bạn chỉ định một _id
, nó thực hiện cập nhật với { upsert: true }
, nghĩa là, nó tạo ra một tài liệu mới nếu không có tài liệu nào phù hợp với truy vấn.
Chúng tôi hiện không có bất kỳ tài liệu nào về
nhà sản xuất
của chúng tôi thu thập. Hãy tạo một cái bằng cách sử dụng save()
phương pháp:
db.producers.save({ _id: 1, name: "Bob Rock" })
Kết quả:
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 1 })
Bây giờ nếu chúng ta tìm kiếm nhà sản xuất bộ sưu tập, chúng tôi thấy bản ghi mới được tạo của chúng tôi:
db.producers.find()
Kết quả:
{ "_id" : 1, "name" : "Bob Rock" }