Bạn có thể sử dụng upert, tức là bất cứ khi nào bạn chèn một giá trị và nó đã tồn tại thì quá trình cập nhật sẽ được thực hiện. Nếu giá trị chưa tồn tại thì nó sẽ được chèn vào.
Trước tiên, hãy để chúng tôi tạo một bộ sưu tập với các tài liệu
> db.onlyInsertIfValueIsUniqueDemo.insertOne({"StudentName":"Larry","StudentAge":22}); { "acknowledged" : true, "insertedId" : ObjectId("5c9a633815e86fd1496b38a4") } > db.onlyInsertIfValueIsUniqueDemo.insertOne({"StudentName":"Mike","StudentAge":21}); { "acknowledged" : true, "insertedId" : ObjectId("5c9a634a15e86fd1496b38a5") } > db.onlyInsertIfValueIsUniqueDemo.insertOne({"StudentName":"Sam","StudentAge":24}); { "acknowledged" : true, "insertedId" : ObjectId("5c9a635015e86fd1496b38a6") }
Sau đây là truy vấn để hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find ()
> db.onlyInsertIfValueIsUniqueDemo.find().pretty();
Điều này sẽ tạo ra kết quả sau
{ "_id" : ObjectId("5c9a633815e86fd1496b38a4"), "StudentName" : "Larry", "StudentAge" : 22 } { "_id" : ObjectId("5c9a634a15e86fd1496b38a5"), "StudentName" : "Mike", "StudentAge" : 21 } { "_id" : ObjectId("5c9a635015e86fd1496b38a6"), "StudentName" : "Sam", "StudentAge" : 24 }
Trường hợp 1 :Sau đây là truy vấn khi một giá trị đã tồn tại. Vì giá trị bạn đang chèn đã tồn tại nên nó sẽ được cập nhật
> db.onlyInsertIfValueIsUniqueDemo.update({StudentName:"Mike"},{$set:{"StudentAge":27}},{ upsert: true}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Xem lại tất cả các tài liệu một lần nữa. Sau đây là truy vấn
> db.onlyInsertIfValueIsUniqueDemo.find().pretty();
Điều này sẽ tạo ra kết quả sau
{ "_id" : ObjectId("5c9a633815e86fd1496b38a4"), "StudentName" : "Larry", "StudentAge" : 22 } { "_id" : ObjectId("5c9a634a15e86fd1496b38a5"), "StudentName" : "Mike", "StudentAge" : 27 } { "_id" : ObjectId("5c9a635015e86fd1496b38a6"), "StudentName" : "Sam", "StudentAge" : 24 }
Trường hợp 2 :Sau đây là truy vấn khi một giá trị là duy nhất. Vì giá trị bạn đang chèn chưa tồn tại nên nó sẽ được chèn vào
>db.onlyInsertIfValueIsUniqueDemo.update({StudentName:"David"},{$set:{"StudentAge":25}},{ upsert: true}); WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : ObjectId("5c9a654ce628c11759caea54") })
Nhìn lại tất cả các tài liệu một lần nữa. Sau đây là truy vấn
> db.onlyInsertIfValueIsUniqueDemo.find().pretty();
Điều này sẽ tạo ra kết quả sau
{ "_id" : ObjectId("5c9a633815e86fd1496b38a4"), "StudentName" : "Larry", "StudentAge" : 22 } { "_id" : ObjectId("5c9a634a15e86fd1496b38a5"), "StudentName" : "Mike", "StudentAge" : 27 } { "_id" : ObjectId("5c9a635015e86fd1496b38a6"), "StudentName" : "Sam", "StudentAge" : 24 } { "_id" : ObjectId("5c9a654ce628c11759caea54"), "StudentName" : "David", "StudentAge" : 25 }