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

时间:2014-02-24 05:14:24

标签: bookshelf.js knex.js

我正在尝试使用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')']以获得实际结果。我在这里做事吗?

谢谢!

4 个答案:

答案 0 :(得分:16)

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

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

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

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

答案 1 :(得分:0)

虽然knex确实以数组形式返回结果,但它也有一种返回第一个结果的方法,该方法将是一个对象-而不是数组。直接进行计数非常简单,而不必依赖[0]或任何东西来访问数组中的计数。例如,更干净的解决方案可能是:

bookshelf
  .knex("hosts")
  .count("id")
  .first()
  .then(function(total) {
    res.send({
      meta: {
        total: total.count
      }
    });
  });

答案 2 :(得分:0)

这似乎正常工作,并且更简单

knex('Quotes').count('quoteBody')
    .then((res)=>{
        //console.log("rows "+JSON.stringify(res))        
        console.log("rowspl2 "+res[0]['count(`quoteBody`)'])
    })
    .catch((err)=>{
        console.log("err "+err)
    })

或尝试这样

    knex('Quotes').count('quoteBody', {as: 'rows'})
        .then((res)=>{
           // console.log("rows "+JSON.stringify(res))
            console.log("rowsp "+res[0]['rows'])
        })
        .catch((err)=>{
            console.log("err "+err)
        })

答案 3 :(得分:0)

节点js代码

let result = await knex.count("id").from('events').first();
if (result) {
console.log(result.count);
}