2016-12-14 47 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){...}); 
}); 
});