使用knex.js / bookshelf.js获取计数结果

问题描述 投票:12回答:2

我正在尝试使用knex执行一个简单的计数(因为它似乎是to not be supported by bookshelf yet)。以下代码正在运行:

bookshelf.knex('hosts').count('id').then(function(total) {
  res.send({
    meta: {
      total: total[0]['count(`id`)']
    }
  });
});

对我来说,我必须做total[0]['count('id')']以获得实际结果,这似乎很奇怪。我在这里做事吗?

谢谢!

bookshelf.js knex.js
2个回答
16
投票

knex.js的所有结果都是数组。查询可能成功,只返回0结果。

此外,您可以直接在列名称(或count()调用)中对列进行别名。像这样:

  bookshelf.knex('hosts').count('id as CNT').then(function(total) {
    res.send({
      meta: {
        total: total[0].CNT
      }
    });
  });

仍然需要获取第一个元素,但您可以将该列引用为普通的JSON属性。


0
投票

虽然knex确实将结果作为数组返回,但它还有一个返回第一个结果的方法,它将是一个对象 - 而不是一个数组。直接计算是非常简单的,而不必依赖[0]或任何东西来访问数组中的计数。对于您的示例,更清洁的解决方案可能是:

bookshelf
  .knex("hosts")
  .count("id")
  .first()
  .then(function(total) {
    res.send({
      meta: {
        total: total.count
      }
    });
  });
© www.soinside.com 2019 - 2024. All rights reserved.