Mongoose findByIdAndUpdate 方法来切换和更新数据库中的布尔值

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)