Tôi cần chèn tài liệu nếu nó không tồn tại. Tôi biết rằng tùy chọn "upsert" có thể làm điều đó, nhưng tôi có một số nhu cầu cụ thể.Upserts in mongodb khi sử dụng các giá trị _id tùy chỉnh
Trước tiên, tôi chỉ cần tạo tài liệu với trường _id của nó, nhưng chỉ khi nó chưa tồn tại. Trường _id của tôi là một số được tạo bởi tôi (không phải là ObjectId). Nếu tôi sử dụng tùy chọn "upsert" thì tôi nhận được "Mod on _id không được phép"
db.mycollection.update({ _id: id }, { _id: id }, { upsert: true });
Tôi biết rằng chúng tôi không thể sử dụng _id trong bộ $.
Vì vậy, câu hỏi của tôi là: Nếu có cách nào để tạo "nếu không tồn tại" một cách nguyên tử trong mongodb?
EDIT: Theo đề xuất của @Barrie làm việc này (sử dụng nodejs và cầy mangut):
var newUser = new User({ _id: id });
newUser.save(function (err) {
if (err && err.code === 11000) {
console.log('If duplicate key the user already exists', newTwitterUser);
return;
}
console.log('New user or err', newTwitterUser);
});
Nhưng tôi vẫn tự hỏi nếu nó là cách tốt nhất để làm điều đó.
cố gắng sử dụng thao tác 'lưu'? tức là db.collection.save ({"_ id": your_id}) –
Lưu lỗi với lỗi khóa trùng lặp nếu đã tồn tại – aartiles