在Sails/Waterline项目中,使用更新方法增加数据库值

Increment database value with update method in Sails/Waterline project

本文关键字:新方法 更新 增加 增加数 数据库 Sails Waterline 项目      更新时间:2024-05-21

我正在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:不,目前不可能。这是关于它的功能请求。