Bho*_*han 3 javascript mongoose mongodb node.js express
每当单击按钮时,我都试图切换和更新数据库中的布尔值。
我的 HTML:
<form action="/browse/<%= book._id %>/sold" method="GET">
<button type="submit"> Mark As Sold </button>
</form>
Run Code Online (Sandbox Code Playgroud)
架构:
var bookSchema = new mongoose.Schema({
title: String,
description: String,
sold: { type:Boolean, default: false }
});
Run Code Online (Sandbox Code Playgroud)
我尝试在 .get 路线上使用它:
Book.findByIdAndUpdate(req.params.id, {$set: {sold: !sold} }, function(err, book){
....
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用..(出售未定义)
我是快递和猫鼬的新手,在谷歌上搜索了很多,但找不到解决方案。请帮忙。 有没有其他方法可以解决这个问题?
小智 7
您使用的方法将不起作用。您在此片段中引用了一个undeclared变量sold:{sold: !sold}。如果有的话,您会想要做{sold: !this.sold},但this在 a 中findById是查询而不是模型。您必须将其findById用于您想要的书,book.sold = !book.sold然后手动更新它 ( ) save。
您可以在模型上创建一个静态方法来完成所有这些。
它看起来像
bookSchema.statics.findByIdAndToggleSold = function(id, callback){
// Your code to find, then update here.
}
小智 5
您可以通过这种方便的方式更新文档:
Book.findOne({ _id: req.params.id }, function(err, book) {
book.sold = !book.sold;
book.save(function(err, updatedBook) {
...
});
});
Run Code Online (Sandbox Code Playgroud)