我正在尝试切换和更新数据库中的布尔值,每当一个按钮被点击..
我的HTML:
<form action="/browse/<%= book._id %>/sold" method="GET">
<button type="submit"> Mark As Sold </button>
</form>
架构:
var bookSchema = new mongoose.Schema({
title: String,
description: String,
sold: { type:Boolean, default: false }
});
我尝试在.get路由上使用这个:
Book.findByIdAndUpdate(req.params.id, {$set: {sold: !sold} }, function(err, book){
....
}
但它不起作用..(sold is undefined)
我是快递和 Mongoose 的新手,在谷歌上搜索了很多,但找不到解决方案。请帮助。还有其他方法可以解决这个问题吗?
5条答案
按热度按时间htzpubme1#
您使用的方法将不起作用。您在此片段中引用了
undeclared
变量sold
:{sold: !sold}
。如果有的话,你会想做{sold: !this.sold}
,但是findById
中的this
是一个查询,而不是模型。你必须为你想要的书使用findById
,手动更新它(book.sold = !book.sold
),然后save
它。您可以在模型上创建一个静态方法来完成所有这些。
它看起来就像
bookSchema.statics.findByIdAndToggleSold = function(id, callback){ // Your code to find, then update here. }
krcsximq2#
您可以通过以下方便的方式更新文档:
3j86kqsm3#
遗憾的是,没有办法在一次操作中直接反转一个记录--如果你只想对布尔值进行操作,你需要像Austin说的那样找到、改变,然后再次保存。
如果你可以稍微改变你的数据,我们实际上可以用整数来近似。如果我们使用整数,我们可以使用按位操作来做到这一点,例如。
在这种情况下,您的Mongoose模型必须指定
myBoolVal
为整数。这需要Int32
包,截至此答案:Mongoose ODM: NumberInt is not defined。例如:zbsbpyhn4#
你可以根据$mod判断奇数和偶数
$mod:[2,0] $mod:[二、一]
var bookSchema = new mongoose.Schema({ title:字符串,说明:字符串,已售出:{类型:编号,默认值:} });
BookSchema.findOneAndUpdate({_id:req.params.id},{$inc:{sold:1}});
req.params.id,sold:{$mod:[2,0]}})
qxsslcnc5#
这是我使用express,mongoose和nodejs的一个例子。
下面是我的模型的一个例子:
其他依赖性: