【问题标题】:Update boolean with Mongoose使用 Mongoose 更新布尔值
【发布时间】:2017-04-30 04:50:06
【问题描述】:

我创建了一个应用程序,我可以在其中创建待办事项列表。我的状态在创建时是错误的。如果对象完成与否,我应该表示的状态。

我的 mongoose 架构在 server.js 中如下所示:

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

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

当我按下我的 index.html 上的按钮时,我使用 angular 将 id 槽发送到 server.js 文件。

// 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

 });
});

如果为假,我需要帮助将布尔值更新为真,如果为真,则更新为假。还是我应该跳过布尔值并使用其他东西?

【问题讨论】:

标签: angularjs mongodb mongoose mean-stack


【解决方案1】:

首先,我认为您不应该在函数内外使用相同的变量名。在这种情况下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){...});
 });
});

【讨论】:

    【解决方案2】:

    您可以通过id找到问题,然后在成功回调中进行更改后将其保存回MongoDB。

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

    到目前为止,我不确定是否可以在 MongoDB 中以原子方式切换布尔字段。

    【讨论】:

    • 成功了!谢谢!但是可以为我解释一下吗`issue.status = !issue.status;` ???
    • @mackeemackee 当我们执行 findById 时,它会返回匹配的文档。我们可以根据我们对服务器的要求来操作文档,就像我们在这种情况下切换 status 字段一样。当我们执行issue.status = !issue.status; 时,它就像普通的javascript 语句一样工作,在右侧评估值并分配给左侧。当我们调用 save 时,它​​实际上将修改后的对象替换为数据库中现有的对象。在使用这种更新方式进行复杂修改时,我们应该注意竞争条件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多