Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Sails/Waterline项目中用更新方法增加数据库值_Javascript_Database_Sails.js_Waterline - Fatal编程技术网

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

Javascript Sails/Waterline项目中用更新方法增加数据库值,javascript,database,sails.js,waterline,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

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

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

如果我正确地发现了您的问题,那么第一个查询只需要检查数据库中是否存在具有给定用户ID的记录。在这种情况下,您可能应该向模型中添加方法

比如:

// 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
:目前不可能。以下是相关内容。

是@Vee6正如您所述,使用User.native()将起作用,另一个选项是:

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

存在第一个查询是为了获取viewNo的上一个值,第二个查询将该数字更新为上一个值+1。我需要一个User.update({viewNo:'+=1'},function(){…})或类似的东西。@Vee6似乎不可能。更新了我的回答因为我现在锁定了mongodb,所以我使用User.native(function(err,collection){})解决了这个问题,其中我使用$inc启动了一个本机mongo查询。