2014-07-22 8 views
7

Potrzebuję pomocy w tym zakresie. Mam projekt tego węzła, który działał od początku. Niedawno zacząłem dostawać komunikat o tym, że mangusta nie jest w stanie aktualizować __v __v w tym samym czasie (szczegóły poniżej). Moja pierwsza myśl była taka, że ​​spowodowała to nowa aktualizacja mangusty, ale nie jestem pewien. Każda pomoc zostanie doceniona. DziękiBłąd mongozy: Nie można aktualizować __v i __v w tym samym czasie

/.../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 Wygląda na to, że błąd jest generowany, kiedy próbuję zapisać. Oto metoda zapisu, którą wywołuję;

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

i oto, jak to nazywam;

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

również, tutaj jest metoda 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

Czy możesz zmodyfikować swoje pytanie w celu uwzględnienia kodu, który powoduje błąd? – JohnnyHK

+0

Tak, będziemy musieli zobaczyć kod tutaj. –

+0

OK, dodałem kod – user3863128

Odpowiedz

2

Proponuję umieścić _id pokrewne usuwania logiki do swojego mangusty pliku definicji schematu modelu

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

Następnie w zwrotnego wykonać toJSON:

var processedJson = resultDoc.toJSON(); 

pobrać wersję przetworzonych ładnie ukrywa logikę wielokrotnego użytku.
UWAGA: toJSON() jest również magicznie wykonywane przez JSON.stringify()

Powiązane problemy