Как я могу искать записи на основе полей в ассоциации Waterline?

Как я могу выполнить поиск в коллекции на основе поля в таблице ассоциаций?

Если мы используем стандартный пример пользователя и питомца из документов Waterline (https://github.com/balderdashy/waterline-docs/blob/master/associations.md), можно ли, например, искать всех пользователей, владеющих определенной породой домашних животных (найти всех владельцы собак, например)?

Это так же просто, как что-то вроде:

User.find()
    .populateAll()
    .where({
        type: 'dog',
        breed: 'scotch collie'
    })
    .then(function (lassies) {
        // ...
    });

Заранее спасибо.


person Andrew Eddie    schedule 01.09.2014    source источник


Ответы (1)


В настоящее время (начиная с Sails v0.10.x) невозможно выполнить поиск по ассоциации. Для ваших целей лучшим решением, вероятно, будет поиск всех домашних животных определенной породы, заполнение их владельцев и объединение списков. Что-то типа:

Pet.find({type: 'dog', breed: 'scotch collie'})
   .populate('owners')
   .exec(function(err, dogs) {

       // Concatenate all the associated owners into one array using reduce,
       // then remove duplicates using uniq and the "id" attribute         
       var owners = _.uniq(_.reduce(dogs, function(memo, dog) {

           return memo.concat(dog.owners);              

       }, []), 'id');

});
person sgress454    schedule 03.09.2014
comment
Спасибо, я не думал, что это возможно. Я, вероятно, в конечном итоге создам представление для обхода этого. - person Andrew Eddie; 04.09.2014
comment
это все еще так? нельзя искать по ассоциации? - person ; 06.03.2015