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

Kết hợp update và query để tạo tài liệu upsert trong MongoDB

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).