我正在尝试使用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')']
以获得实际结果,这似乎很奇怪。我在这里做事吗?
谢谢!
knex.js的所有结果都是数组。查询可能成功,只返回0结果。
此外,您可以直接在列名称(或count()
调用)中对列进行别名。像这样:
bookshelf.knex('hosts').count('id as CNT').then(function(total) {
res.send({
meta: {
total: total[0].CNT
}
});
});
仍然需要获取第一个元素,但您可以将该列引用为普通的JSON属性。
虽然knex确实将结果作为数组返回,但它还有一个返回第一个结果的方法,它将是一个对象 - 而不是一个数组。直接计算是非常简单的,而不必依赖[0]或任何东西来访问数组中的计数。对于您的示例,更清洁的解决方案可能是:
bookshelf
.knex("hosts")
.count("id")
.first()
.then(function(total) {
res.send({
meta: {
total: total.count
}
});
});