MongoDB - khi sử dụng upsert làm sao để khi create/insert document mới thì tạo thêm trường createdAt?

·

1 min read

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

Tham khảo