È necessario inserire un documento se non esiste. So che l'opzione "upsert" può farlo, ma ho alcune esigenze particolari.Upserts in mongodb quando si utilizzano valori _id personalizzati
Prima devo creare il documento solo con il suo campo _id, ma solo se non esiste già. Il mio campo _id è un numero generato da me (non un ObjectId). Se si utilizza l'opzione "upsert" allora ottengo "Mod su _id non ammesso"
db.mycollection.update({ _id: id }, { _id: id }, { upsert: true });
So che non possiamo usare il _id in un $ set.
Quindi, la mia domanda è: se esiste un modo per un "creare se non esiste" atomicamente in mongodb?
EDIT: Come proposto dalla @Barrie questo funziona (usando nodejs e mangusta):
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);
});
Ma mi chiedo ancora se è il modo migliore per farlo.
provare ad utilizzare un'operazione 'save'? Ad esempio, db.collection.save ({"_ id": your_id}) –
Salva fallito con un errore chiave duplicato se esiste già – aartiles