Bạn có thể sử dụng $setOnInsert
trong tham số cập nhật của bạn để nó sẽ chỉ áp dụng trong trường hợp chèn; với việc cập nhật trở thành không chọn trong trường hợp tài liệu đã tồn tại:
return await Foo.findOneAndUpdate(
filter, // find a document with that filter
{$setOnInsert: fooDoc}, // document to insert when nothing was found
{ upsert: true, new: true, runValidators: true }
)
Lưu ý rằng bạn cũng nên tạo một chỉ mục duy nhất trên các trường có trong filter
của bạn và sau đó xử lý khả năng xảy ra lỗi trùng lặp. Xem bài đăng này
để biết chi tiết tại sao.