我试图在点击按钮时切换并更新数据库中的布尔值。
我的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){
....
}
但它不起作用..(售出未定义)
我是新来表达和猫鼬,并在谷歌上搜索了很多,但无法找到解决方案。请帮忙。 有没有其他方法可以解决这个问题?
答案 0 :(得分:4)
您使用的方法无效。您在此片段中引用undeclared
变量sold
:{sold: !sold}
。如果有的话,您需要{sold: !this.sold}
,但this
中的findById
是查询,而不是模型。您必须使用findById
作为所需的图书,手动更新(book.sold = !book.sold
),然后save
。
您可以在模型上创建一个静态方法来完成所有这些。
看起来像
bookSchema.statics.findByIdAndToggleSold = function(id, callback){
// Your code to find, then update here.
}
答案 1 :(得分:2)
您只需以这种方便的方式更新文档:
Book.findOne({ _id: req.params.id }, function(err, book) {
book.sold = !book.sold;
book.save(function(err, updatedBook) {
...
});
});
答案 2 :(得分:1)
很遗憾没有办法在一次操作中直接反转记录 - 如果你只想操作布尔,你需要找到,变异,然后再按照奥斯汀所说的那样保存。
如果您可以略微更改数据,我们实际上可以使用整数来近似。如果我们使用整数,我们可以使用按位运算来执行此操作,例如
Book.insert({myBoolVal: 0}); // Insert as false
Book.findAndUpdate(req.params.id, {$bit: {myBoolVal: {xor: 1}}}); // 0 xor 1 = 1; 1 xor 1 = 0
Book.find({myBoolVal: 0}); // false
Book.find({myBoolVal: 1}); // true
在这种情况下,您的Mongoose模型必须将myBoolVal
指定为整数。这需要Int32
包,截至此答案:Mongoose ODM: NumberInt is not defined。例如:
var NumberInt = require("mongoose-int32");
var bookSchema = new mongoose.Schema({
title: String,
description: String,
sold: { NumberInt, default: 0}
});
答案 3 :(得分:-1)
<function model="ir.actions.report" name="unlink_action">
<value eval="[ref('sale.action_report_saleorder')]"/>
</function>
<function model="ir.actions.server" name="unlink_action">
<value eval="[ref('sale.model_sale_order_action_share')]"/>
</function>
这是我使用express,猫鼬和nodejs的示例。
这是我的模型的一个例子:
app.put("/todo/update/:id", function (req, res) {
Todo.findById(req.params.id, function (err, todo) {
todo.done = !todo.done;
todo.save(function (err, updatedTodo) {
if (err) {
console.log(err);
} else {
res.redirect("/")
}
})
})
});
其他依赖项: