2014-06-08 13 views
15

Ci sono alcune domande là fuori ma non riesco a trovare una soluzione che sembra essere l'approccio accettato al momento.MongoError: Mod on _id non consentito

Sto cercando di aggiornare un documento in MongoDB e sto usando Mongoosejs per farlo. Tuttavia, sto ottenendo questo errore:

{ [MongoError: Mod on _id not allowed] 
    name: 'MongoError', 
    lastErrorObject: 
    { err: 'Mod on _id not allowed', 
    code: 10148, 
    n: 0, 
    connectionId: 35, 
    ok: 1 }, 
    ok: 0, 
    errmsg: 'Mod on _id not allowed' } 

Il codice che sto usando per fare l'aggiornamento è:

app.put('/task/:short', auth, function (req, res) { 
    Task.findOneAndUpdate({short:req.params.short}, req.body, function(err, task) { 
    if(err) console.log(err); 
    res.json(200, {content: task}); 
    }) 
}); 

perché ho avuto un "campo" chiamato "short_id" Ho pensato che potrebbe essere un problema con avere una parte "_id" nel nome del campo, così l'ho cambiato in "breve" ma ancora senza fortuna - ottengo lo stesso errore. In seguito ho scoperto che pensa che sto provando a cambiare il campo _id, ma non perché.

+0

Cosa stai passando come req.body? –

+0

Sto passando '_id' nel' req.body' e non dovrei avere ragione? – tommyd456

+1

Beh, no, _id dovrebbe solo (possibilmente) essere nella parte di ricerca, non nella parte di aggiornamento (req.body) –

risposta

28

Il problema era perché stavo usando short (che è unico) per trovare il documento e aggiornarlo e _id veniva inviato come valore da aggiornare che non può essere eseguito.

Pertanto, prima di inviare i parametri ho cancellato lo _id dall'oggetto.

delete the_object._id 

e tutto ora funziona.

+0

molti ringraziamenti! mi ha aiutato – ekqnp

7

Se si utilizza lodash, il seguente codice può aiutare ..

var id = update._id; 
var update = _.omit(update,'_id'); 
mongo.mCustomers.findOneAndUpdate({_id:id},update,callback); 
4

ho avuto le prove di passaggio localmente su MongoDB 3.x, ma mi è stato sempre questo errore in CircleCI (un servizio di integrazione continua), che esegue una versione precedente (2.4.x)

Risulta l'installazione di una versione più recente risolto il problema che stavo avendo.

0

Questo problema non esiste in MongoDB versione 3.6, ma sul nostro server di produzione utilizzando la versione 2.4 è diventato un problema.