在Sails/Waterline项目中,使用更新方法增加数据库值
Increment database value with update method in Sails/Waterline project
我正在Sails中开发一个web应用程序,在该应用程序中我使用Waterline操作数据库。假设我想增加数据库中某个特定单元的字段,例如某个用户的viewsNo,我现在这样做:
User.findOne(userId, function foundUsr(err, user) {
// ..handle error stuff..
User.update(userId, {viewsNo: user.viewsNo + 1}, function (err, usr) {
// ..rest of the code..
})
});
是否可以用一个调用处理这两个数据库操作?除了数据库加载之外,它还将提高代码的清晰度,但我无法找到解决方案。
是@Vee6,正如您所说,使用User.nature()可以工作,另一个选项是:
User.findOne(userId, function foundUsr(err, user) {
user.viewsNo++;
user.save(function(err) { /* updated user */ });
});
如果我正确地解决了您的问题,则需要第一个查询来检查数据库中是否存在给定userId的记录。在这种情况下,您可能应该将beforeUpdate()方法添加到您的模型中。
类似于:
// api/models/user.js
module.exports = {
attributes: {/* ... */},
beforeUpdate: function(values, next) {
User.findOne(values.userId).exec(function(err, user) {
// ..handle error stuff..
if (err) return next(err);
if (typeof user === 'undefined') return next(new Error('bad userId'));
next();
});
}
};
现在,您可以在控制器中更新您的值,若发生错误,sails将停止更新。
UPD:关于在单个查询中递增viewsNo
:不,目前不可能。这是关于它的功能请求。
相关文章:
- 向对象添加新方法和值,同时避免重复
- 如何从弹簧控制器方法更新html img src
- 如何在一个时间间隔后追加新的更新
- 什么'在javascript中将新方法添加到对象中的区别是什么
- 使用新项目更新KendoUI网格数据源
- 使用新值更新时出现数组问题
- 在原型上声明新方法
- 使用Plotly中的新数据更新图形的高性能方法
- MySQL 按行[id]使用新信息更新“n”行数
- 编写 if 语句的新方法
- 使用新数据更新 D3 饼图.json
- 对数据库进行 AJAX 编辑时,我是否应该立即使用新数据更新接口
- ReactJS 从父组件的 onClick 方法更新对子组件的 ajax 调用
- 使用原型将新方法添加到JScrollPane
- 使用从 MongoDB 获取的新数据更新对象属性
- 如何在响应和请求中添加新方法
- 如何使用在构造函数中创建的方法更新同一构造函数中的另一个变量
- ES5提供的新方法的实际用途是什么?
- 使用$http POST方法更新textarea
- 在javascript中的新方法中使用构造函数中的privat-var