Photo by Tim Marshall on Unsplash
MongoDB - khi sử dụng upsert làm sao để khi create/insert document mới thì tạo thêm trường createdAt?
Khi sử dụng upsert
trong MongoDB, bạn muốn thêm trường createdAt
với thời gian hiện tại chỉ khi document được tạo mới?
Bằng cách dùng operator $setOnInsert
. Đây là một operator đặc biệt trong MongoDB chỉ cập nhật giá trị khi tài liệu được chèn mới (tức là khi không tìm thấy tài liệu nào khớp với điều kiện và MongoDB phải tạo tài liệu mới).
Dưới đây là cách sử dụng $setOnInsert
với upsert
(ví dụ lấy ra từ docs của MongoDB):
db.products.updateOne(
{ _id: 1 },
{
$set: { item: "apple" },
$setOnInsert: { defaultQty: 100 }
},
{ upsert: true }
)
Document mới nếu được tạo ra:
{ "_id" : 1, "item" : "apple", "defaultQty" : 100 }
3 việc mà MongoDB đã thực hiện trong trường hợp tạo mới:
Tạo mới document
set data bằng operation
$set
set data bằng operation
$setOnInsert