2014-07-22 12 views
7

Ich brauche Hilfe mit diesem. Ich habe dieses Knotenprojekt, das von Anfang an gearbeitet hat. Kürzlich fing ich an, einen Fehler über Mungo zu bekommen, der __v ein __v zur gleichen Zeit (Details unten) nicht aktualisieren konnte Mein erster Gedanke war, dass ein neues Update von Mungo dies verursachte, aber ich bin mir nicht sicher. Jede Hilfe wird geschätzt. DankMongoose Fehler: Kann __v und __v nicht gleichzeitig aktualisieren

/.../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 Sieht aus wie der Fehler ausgelöst wird, wenn ich zu retten versuchen. Hier ist die sichere Methode, die ich anrufe;

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); 
    } 
    }); 
} 

und hier ist, wo ich es nenne;

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

auch, hier ist PreferenceModel.save Methode;

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

Können Sie Ihre Frage bearbeiten, um Ihren Code einzuschließen, der den Fehler verursacht? – JohnnyHK

+0

Ja, wir werden hier Code sehen müssen. –

+0

Ok, ich habe den Code – user3863128

Antwort

2

Ich schlage vor, Sie _id zugehörige Löschlogik in Ihre Mungo Modell Schema Definitionsdatei setzen:

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 
}; 

Dann in Ihrem Rückruf toJSON ausführen:

var processedJson = resultDoc.toJSON(); 

die verarbeitete Version abzurufen die versteckt wiederverwendbare Logik.
HINWEIS: toJSON() wird auch magisch von JSON.stringify() ausgeführt

Verwandte Themen