2016-12-14 48 views
0

我已經創建了一個應用程序,我可以創建一個待辦事項列表。我創建時的狀態是錯誤的。我應該表示對象是否完成的狀態。更新布爾與Mongoose

我的貓鼬的模式看起來像這樣在server.js

// Create mongoose schema 
var issueSchema = mongoose.Schema ({ 
    issue: String, 
    date: String, 
    status: Boolean,  
});  

// Create mongoose model 
Issue = mongoose.model('Issue', issueSchema); 

當我採用了棱角分明發送ID波谷到server.js文件按我的index.html IM在我的按鈕。

// API PUT ======================== 
app.put('/issueList/:id', function(req, res){ 
var id = req.params.id; 

Issue.findById(id, function(err, Issue) { 
    console.log("Object with ID: " + id); // Correct ID 

    // I need code here 

}); 
}); 

我需要幫助更新布爾值爲true如果爲false或false如果爲true。或者我應該跳過布爾值並使用其他的東西?

+0

的[貓鼬Schema.update不更新布爾]可能的複製(http://stackoverflow.com/questions/33997078/mongoose-schema-update-doesnt-update-boolean) – user1211

+0

如果我使用我可以從False更改爲True(如果false爲默認值),但不是其他方式 – mackeemackee

回答

1

您可以通過id找到問題,然後在成功回調中進行更改後將其保存回MongoDB。

Issue.findById(id, function(err, issue) { 
    issue.status = !issue.status; 
    issue.save(function (err) { 
     if(err) { 
     console.error('ERROR!'); 
     } 
    }); 
}); 

我不確定在MongoDB中自動切換布爾型字段的可能性。

+0

它工作正常!謝謝!但是可以爲我解釋這個問題'issue.status =!issue.status;'??? – mackeemackee

+0

@mackeemackee當我們做** findById **時,它返回匹配的文檔。我們可以按照我們在服務器上的要求操作文檔,就像我們在這種情況下切換** status **字段一樣。當我們做'issue.status =!issue.status;'時,它就像正常的JavaScript語句一樣工作,評估右側的值並指定到左側。當我們調用保存時,它實際上將修改後的對象替換爲數據庫中現有的對象。我們應該照顧**比賽條件**,同時使用這種更新方式進行復雜的修改。 –

0

首先,我不認爲你應該在函數外部和內部使用相同的變量名稱。在這種情況下,Issue是相同的,將其更改爲issue

你可以嘗試這個更新。

Issue.findById(id, function(err, issue) { 
    console.log("Object with ID: " + id); // Correct ID 
    issue.status = !issue.status; 
    issue.save(function(err,result){...}); 
}); 
});