Sử dụng toán tử $set cùng với upsert:true. Tạo collection trước:
> db.updateWithUpsertDemo.insertOne({"StudentFirstName":"John","StudentAge":21});
{ "acknowledged": true, "insertedId": ObjectId("5cd2a61c345990cee87fd890") }
> db.updateWithUpsertDemo.insertOne({"StudentFirstName":"Larry","StudentAge":23});
{ "acknowledged": true, "insertedId": ObjectId("5cd2a624345990cee87fd891") }
> db.updateWithUpsertDemo.insertOne({"StudentFirstName":"David","StudentAge":24});
{ "acknowledged": true, "insertedId": ObjectId("5cd2a62c345990cee87fd892") }
Hiển thị tài liệu
> db.updateWithUpsertDemo.find().pretty();
Kết quả:
{
"_id": ObjectId("5cd2a61c345990cee87fd890"),
"StudentFirstName": "John",
"StudentAge": 21
}
{
"_id": ObjectId("5cd2a624345990cee87fd891"),
"StudentFirstName": "Larry",
"StudentAge": 23
}
{
"_id": ObjectId("5cd2a62c345990cee87fd892"),
"StudentFirstName": "David",
"StudentAge": 24
}
Kết hợp update và query để upsert
> db.updateWithUpsertDemo.update(
{_id: ObjectId("5cd2a624345990cee87fd891")},
{"$set": {"StudentFirstName": "Chris"}},
{upsert:true}
);
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
Kiểm tra kết quả
> db.updateWithUpsertDemo.find().pretty();
Kết quả (Larry đã đổi thành Chris):
{
"_id": ObjectId("5cd2a61c345990cee87fd890"),
"StudentFirstName": "John",
"StudentAge": 21
}
{
"_id": ObjectId("5cd2a624345990cee87fd891"),
"StudentFirstName": "Chris",
"StudentAge": 23
}
{
"_id": ObjectId("5cd2a62c345990cee87fd892"),
"StudentFirstName": "David",
"StudentAge": 24
}
Giải thích: Nếu _id không tồn tại, MongoDB sẽ tạo tài liệu mới với các trường từ cả query và update (kết hợp).