2017-03-09 3 views
1

J'essaye de mettre à jour ma collection basée sur un si je trouve une valeur. Ma fonction de sauvegarde ressemble à ceci `Mise à jour d'une collection dans mongodb

router.post('/savePage', function (req, res) { 
    var page = req.body.page; 

    var query = {'pageId': page.pageId}; 
    var paged = new pagedb(page); 

    pagedb.find(query, function (err, result) { 
     if(err) return console.error(err); 

     if(result.length > 0){ 
      pagedb.update({'pageId': page.pageId}, page); 
      res.send('updated') 
     } 
     else{ 
      paged.save(function (err) { 
       if (err) { 
       console.log('error saving page!'); 
       throw err; 
      }; 
      res.send('saved'); 
     }); 
     } 
    }); 
});` 

Mon schéma ressemble à ceci

var pageShema = new Schema({ 
pageId: { 
    type: String 
}, 
logo: { 
    type: String 
}, 
show: { 
    type: String 
}, 
teamName: { 
    type: String 
}, 
header1: { 
    type: String 
}, 
header2: { 
    type: String 
}, 
date: { 
    type: Date, 
    default: Date.now 
}, 
offense:{ 
    type: {} 
}, 
defense:{ 
    type: {} 
} 
}); 

Mon sauvegarde fonctionne correctement mes données ne semble pas mettre à jour. J'utilise mongodb 3.2. En substance, je veux remplacer la page existante par une nouvelle. La page en cours d'envoi dans la demande

+0

Dans votre requête de mise à jour, il ressemble vous passez une valeur directement depuis req.body.page, non cochée et non modifiée, en tant que [paramètre de mise à jour] (https://docs.mongodb.com/manual/reference/method/db.collection.update/#update-parameter). Êtes-vous sûr que c'est sûr? –

Répondre

1

Le update ne sera pas effectué, sauf si vous spécifiez un rappel ou un appel à exec(). Vous pouvez le faire soit:

pagedb.update({ 'pageId': page.pageId }, page).exec(); 

Ou:

pagedb.update({ 'pageId': page.pageId }, page, function(err, res) { 
    if (err) return console.error(err); 
    console.log(res); 
}); 

En utilisant mangouste, pour le débogage, vous pouvez voir la requête mongodb sous-jacente à l'aide debug:

var mongoose = require('mongoose') 
mongoose.set('debug', true); 
+0

Merci beaucoup! Cela a fait l'affaire j'ai utilisé votre deuxième suggestion. J'ai introduit une fonction de rappel. – inhaler