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