2016-12-14 2 views
0

Я создал приложение, в котором я могу создать список дел. И у меня есть статус, который является ложным при создании. Статус, который я должен представлять, если объект сделан или нет.Обновление boolean с 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 им с помощью углового отправить корыто идентификатор файла 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 

}); 
}); 

Мне нужна помощь в обновлении логического значения до значения true, если false или false, если true. Или я должен пропустить значение boolean и использовать что-то еще?

+0

Возможный дубликат [Mongoose Schema.update не обновляет логическое значение] (http://stackoverflow.com/questions/33997078/mongoose-schema-update-doesnt-update-boolean) – user1211

+0

Если я использую, что я могу измениться с False на True (если false по умолчанию), но не наоборот – mackeemackee

ответ

1

Вы можете найти проблему по идентификатору, а затем сохранить его обратно в 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, оценивая значение с правой стороны и присваивая левой стороне. Когда мы вызываем save, он фактически заменяет измененный объект существующим в базе данных. Мы должны позаботиться о ** условиях гонки ** при выполнении сложных модификаций, используя этот способ обновления. –

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){...}); 
}); 
}); 
Смежные вопросы