Получить результат подсчета с помощью knex.js/bookshelf.js

Я пытаюсь выполнить простой подсчет с помощью knex (так как он, кажется, еще не поддерживается книжной полкой). Следующий код работает:

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

Мне просто странно, что мне нужно сделать total[0]['count('id')'] чтобы получить реальный результат. Я делаю вещи прямо здесь?

Спасибо!

Ответ 1

Все результаты от knex.js являются массивами. Запрос может быть успешным и просто вернуть 0 результатов.

Кроме того, вы можете псевдоним столбца непосредственно в имени столбца (или count() вызов). Вот так:

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

По-прежнему нужно получить первый элемент, но вы можете ссылаться на столбец как на обычное свойство JSON.