Как рассчитать размер ассоциации с ватерлинией / парусами?

Использование парусов 0.10.5/ ватерлинии 0.10.15:

Я не могу найти ответ на простой вопрос: как подсчитать элементы ассоциации, не используя populate() (которая загрузит все данные).

Давайте возьмем простое отношение many2many с помощью:

User:
    attributes: {
        following: {
            collection: 'user',
            via: 'follower',
            dominant: true
        },

        follower: {
            collection: 'user',
            via: 'following'
        }

Теперь мне нужен размер коллекций. В настоящее время я пытаюсь

User.findById(1).populateAll().exec(function(err, user) {
   // count of followings -> user.following.length;
   // count of followers-> user.follower.length;
}

что приводит к загрузке коллекций.

  • Мне не хватает функции подсчета на уровне сбора, чтобы избежать заполнения / загрузки данных.
  • Есть ли возможность получить доступ к (автоматически сгенерированным) таблицам соединений, чтобы выполнить запрос счета непосредственно в соединении?

Что-то вроде:

User.findById(1).count({'followings'}).exec(function(err, followings) {
...}

или же

UserFollowingFollow_FollowFollowing.countByUserFollowingFollowId(1).
    exec(function(err, followings) {
...}

1 ответ

Waterline действительно предлагает count Метод запроса, и его можно использовать для решения вашей проблемы:

User.count().where({follower: followerId})
.exec(function(err, numberOfFollowings) {
  //numberOfFollowings will be the integer that you need
})

followerId это идентификатор, на который вы переходите User.findOne() в вашем примере.

Вы также можете прочитать документацию Waterline об этом.

Другие вопросы по тегам