2015-04-06 14 views
16

In base a MongoDB's documentation una chiamata a save creerà un nuovo documento o aggiornerà un documento esistente se viene fornito _id. La documentazione di Mongoose è less detailed e non specifica se verrà inserita o aggiornata.Mongoose/MongoDB che lancia l'errore della chiave duplicata al salvataggio?

Sto tentando di utilizzare la funzione di Mongoose save per aggiornare un documento, ma continuo a ricevere l'errore: la funzione di

{"error":{"name":"MongoError","code":11000,"err":"insertDocument :: caused by :: 11000 E11000 duplicate key error index: staging.participants.$_id _ dup key: { : ObjectId('5515a34ed65073ec234b5c5f') }"}}

fa Mongoose save eseguire un upsert come la funzione di MongoDB save o è solo eseguendo un inserto?

risposta

16

Ciò che definisce se lo save sarà un inserto o un aggiornamento è il flag isNew, come è possibile see here.

Questo flag viene impostato automaticamente su false quando l'istanza del documento viene restituita da una query find (o una qualsiasi delle sue varianti). Se si istanziare il documento manualmente, provare a impostare questo flag su false prima di salvarlo:

var instance = new Model({ '_id': '...', field: '...' }); 
instance.isNew = false; 
instance.save(function(err) { /* ... */ }); 

C'è anche una funzione di init, che inizializza il documento e automatically set isNew to false:

var data = { '_id': '...', field: '...' }; 
var instance = new Model(); 
instance.init(data, {}, function(err) { 
    instance.save(function(err) { /* ... */ }) 
}); 
Problemi correlati