使用Sails / Waterline项目中的update方法增加数据库值

时间:2015-02-25 13:16:25

标签: javascript database sails.js waterline

我正在使用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..
  })
});

是否可以通过一次调用处理这两个数据库操作?除了数据库加载,它还将提高代码清晰度,但我无法找到解决方案。

2 个答案:

答案 0 :(得分:3)

是的@ Vee6如你所述,使用User.native()将起作用,另一种选择是:

User.findOne(userId, function foundUsr(err, user) {
  user.viewsNo++;
  user.save(function(err) { /* updated user */ });
});

答案 1 :(得分:0)

如果我正确地解决了您的问题,则需要进行第一次查询,以检查数据库中是否存在具有给定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:目前不可能。这是关于它的feature request