Как рассчитать размер ассоциации с ватерлинией / парусами?
Использование парусов 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 об этом.