如何用bookshelf nodeJS选择LIMIT mysql

时间:2014-10-16 18:17:44

标签: javascript mysql node.js bookshelf.js

我正在使用节点JS的bookhelf插件来执行mysql查询。但我不知道如何执行LIMIT查询。像那样

SELECT * from tableName LIMIT 2;

我的连接书架:

Bookshelf.mysqlAuth = Bookshelf.initialize({
    client: client,
    connection: {
      host     : host,
      user     : user,
      password : password,
      database : database
    }

和数据方法:

bookshelf.Img = Bookshelf.Model.extend({
    tableName: 'image'
  });

您可以在呼叫连接时使用此功能:

  var qb = data.Img.query();
  qb.where('img_md5', '=', imgMD5save).update({img_size: fileLength, img_local_url: folder, img_type: fileType, img_downloaded: 1}).then(function(){});

我试过

 qb.limit(5).then(function(){});

但它发出错误

  

可能未处理的TypeError:无法调用未定义的方法'apply'

请为此提出任何解决方案。 谢谢!

2 个答案:

答案 0 :(得分:1)

在审核了您尝试在qb模型上执行的操作后,您尝试使用UPDATE子句运行LIMIT查询。

  • LIMIT可与UPDATE一起使用,但仅与row count一起使用。
  • 参考此StackOverflow question
  • 我建议您不要在更新时使用LIMIT条款,而是强化WHEREUPDATE查询。

如果您的目的只是运行带有SELECT子句的LIMIT查询,请查看我在下面提供的代码段:

var qb = data.Img.query();
  qb
    .select('*')
    .from('image')
    .where('img_md5', '=', imgMD5save)
    .limit(2)
    .then(function(result){
        return result;
    })
    .catch(function(error) {
        throw new error;
    });

答案 1 :(得分:1)

根据documention,您可以这样写:

bookshelf.Img.query(function(qb) {
    qb.offset(30).limit(10);
})
.fetchAll()
.then(...);

这将从第30张图片开始返回10张图像的集合。