2017-03-09 115 views
1

我想基於一個如果我找到一個值來更新我的集合。我保存功能看起來像這樣 `在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'); 
     }); 
     } 
    }); 
});` 

我的模式是這樣的

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

我正確保存作品,我的數據似乎並沒有更新。我正在使用mongodb 3.2。實質上,我想用新的頁面替換現有的頁面。請求中發送的頁面

+0

在您更新查詢,它看起來像你直接從req.body.page傳遞一個值,取消選中和未改變,作爲[更新參數](https://docs.mongodb.com/manual/reference/method/db.collection.update/#update-parameter )。你確定這是安全的嗎? –

回答

1

將不會執行update,除非您指定回調或致電exec()。您可以執行:

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

或者:

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

使用貓鼬,用於調試您可以使用debug看到底層的MongoDB查詢:

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

非常感謝!這就是我使用你的第二個建議的訣竅。我介紹了一個回調函數。 – inhaler