MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongoose aggiorna più documenti non aggiorna nulla

Dopo alcune ore trascorse a cercare di scoprire dove fosse l'errore e perché non stava aggiornando il database, ho scoperto che in realtà ha aggiornato il database. Il problema era che stavo controllando l'aggiornamento in mongo shell e dopo averlo aggiornato su una richiesta di post di nodejs, non veniva visualizzato nella shell come aggiornato. Tuttavia, quando console.log() le etichette, è stato aggiornato. Quindi ho studiato ulteriormente il problema e ho scoperto che il problema non era la shell mongo, ma l'uso errato dell'aggiornamento del comando mongoose. Mi mancava l'argomento del callback. Dopo aver aggiunto la funzione di callback, i dati sono stati aggiornati immediatamente nella mongo shell.

Quindi invece di fare:

Label.update({'_id': { $in: post.labelIds }}, {$addToSet: {postIds:req.body.id}}, {multi: true})

Non bisogna dimenticare di aggiungere la richiamata:

Label.update({'_id': { $in: post.labelIds }}, {$addToSet: {postIds:req.body.id}}, {multi: true}, function(err, affected) {
   if(err)
      console.log(err)
   else
      console.log(affected)
      // After successful update, redirect here to another page...

O come una risposta duplicata suggerisce di eseguire exec():

Label.update({'_id': { $in: post.labelIds }}, {$addToSet: {postIds:req.body.id}}, {multi: true}).exec()