Necesito insertar un documento si no existe. Sé que la opción "upsert" puede hacer eso, pero tengo algunas necesidades particulares.Responde en mongodb cuando se usan valores de _id personalizados
Primero necesito crear el documento con su campo _id solamente, pero solo si no existe ya. Mi campo _id es un número generado por mí (no un ObjectId). Si utilizo la opción "upsert" Entonces consigo "Mod en _id no permitido"
db.mycollection.update({ _id: id }, { _id: id }, { upsert: true });
Sé que no podemos usar _ID en un conjunto $.
Entonces, mi pregunta es: ¿hay alguna manera de "crear si no existe" atómicamente en mongodb?
EDIT: Según lo propuesto por @Barrie esto funciona (usando nodejs y mangostas):
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);
});
Pero todavía me pregunto si es la mejor manera de hacerlo.
intente utilizar una operación 'save'? es decir db.collection.save ({"_ id": your_id}) –
Guardar falla con un error de clave duplicada si ya existe – aartiles