2014-07-22 14 views
7

Ho bisogno di aiuto con questo. Ho questo progetto di nodo che ha funzionato dall'inizio. Recentemente ho iniziato ad avere un errore su mangusta non essere in grado di aggiornare __v un __v allo stesso tempo (dettagli di seguito) Il mio primo pensiero è stato che un nuovo aggiornamento di mangusta ha provocato questo, ma non ne sono sicuro. Qualsiasi aiuto sarà apprezzato. GrazieErrore di modifica: Impossibile aggiornare __v e __v allo stesso tempo

/.../node_modules/mongoose/lib/utils.js:413 
     throw err; 
      ^
MongoError: exception: Cannot update '__v' and '__v' at the same time 
    at Object.toError (/.../node_modules/mongoose/node_modules/mongodb/lib/mongodb/utils.js:114:11) 
    at /.../node_modules/mongoose/node_modules/mongodb/lib/mongodb/db.js:1131:31 
    at /.../node_modules/mongoose/node_modules/mongodb/lib/mongodb/db.js:1846:9 
    at Server.Base._callHandler (/.../node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/base.js:445:41) 
    at /.../node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:478:18 
    at MongoReply.parseBody (/.../node_modules/mongoose/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:68:5) 
    at null.<anonymous> (/.../node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:436:20) 
    at EventEmitter.emit (events.js:95:17) 
    at null.<anonymous> (/.../node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:201:13) 
    at EventEmitter.emit (events.js:98:17) 

EDIT si presenta come l'errore viene generato quando tento di salvare. Ecco il metodo di salvataggio che chiamo;

save: function (callback) { 
    // A Helper function 
    function setID(instance, id) { 
    instance._id = id; 
    }; 

    var self = this; // Preserve reference to the instance 
    var update = Utils.clone(this); 
    delete update._id; // Delete the _id property, otherwise Mongo will return a "Mod on _id not allowed" error 

    // Prepare updates for saving 
    for (var key in update) { 
    if (update[key] == undefined) 
     delete update[key]; 
    if (key == 'company' || key == 'local_currency') 
     update[key] = update[key].getID(); 
    } 

    PreferenceModel.save(this._id, update, function (err, savedDoc) { 
    if (err) callback(err); 
    else { 
     if (!self.getID()) // If the object didn't previously have an _id property 
     setID(self, savedDoc._id); 
     callback(null, self); 
    } 
    }); 
} 

ed ecco dove lo chiamo;

preference.save(function (err, savedPreference) { 
    if (err) callback(err); 
    else callback(null); 
}); 

inoltre, ecco il metodo PreferenceModel.save;

function save(id, update, callback) { 
    Preference.findByIdAndUpdate(id, update, {upsert: true}, function (err, savedDoc) { 
    if (err) callback(err); 
    else callback(null, savedDoc); 
    }); 
} 
+0

È possibile modificare la domanda per includere il codice che causa l'errore? – JohnnyHK

+0

Sì, avremo bisogno di vedere un po 'di codice qui. –

+0

Ok, ho aggiunto il codice – user3863128

risposta

2

io suggerisco di mettere _id logica di eliminazione relativa nella vostra mangusta file di modello di definizione dello schema:

var UserSchema = new mongoose.Schema(fieldDefinitions); 

// Ensure virtual fields are serialised. 
UserSchema.set('toJSON', { 
    virtuals: true 
}); 

// Ensure able to see virtual fields output when using console.log(obj) 
UserSchema.set('toObject', { 
    virtuals: true 
}); 

UserSchema.options.toJSON = { 

    transform : function(doc, ret, options) { 

     console.log('--> ' + require('util').inspect(ret._id.id)); 

     ret.id = ret._id.id; 
     delete ret._id; 
     delete ret.__v; 

     return ret; 
    }, 
    virtuals: true 
}; 

Poi, nel tuo callback eseguire toJSON:

var processedJson = resultDoc.toJSON(); 

per recuperare la versione elaborata che nasconde bene la logica riutilizzabile.
NOTA: toJSON() viene eseguito magicamente anche da JSON.stringify()

Problemi correlati