2015-10-17 3 views
1

Я пытаюсь найти эффективный способ получить результаты, которые распространяются на несколько моделей. В моем примере у меня есть три модели:Эффективные запросы по нескольким моделям с использованием Sailing.js waterline

  • Video, который хранит видео данных, включая создатель видео
  • User, которая хранит пользовательские данные
  • Follower, какие магазины, которые следуют пользователи, которые другие пользователи

Упрощенная версия моих моделей выглядит так:

// Video.js 

module.exports = { 

attributes: { 
    title: { 
     type: 'string' 
    }, 
    creator: { 
     model: 'User' 
    } 
    } 
}; 


// User.js 

module.exports = { 

    attributes: { 
    user_name: { 
     type: 'string' 
    } 
    } 
}; 


// Follower.js 

module.exports = { 

    attributes: { 
    user: { 
     model: 'User' 
    }, 
    follower: { 
     model: 'User' 
    } 
    } 
}; 

Я понимаю, что я мог хранить связь между многими и многими как Collection в User напрямую, но я также сохраняю другие значения вместе с ним, например, когда пользователь начал следить за другим пользователем и из какого места он это сделал. Кроме того, я храню много похожих данных, и я хотел бы сохранить основные модели как Video и User lean.

Итак, теперь я пытаюсь получить 10 последних видеороликов (дата создания сохраняется в атрибуте createdAt, автоматически добавленном ватерлинией), которые были созданы пользователем, которым данный пользователь следует.

Начиная с данного пользователя (назовем его queryingUser) Я пытаюсь получить всех пользователей, которых он следует, и использовать их в качестве входных данных для поиска видео. Я представляю себе вызов выглядеть следующим образом:

Follower.find({where: {follower: queryingUser} , select: ['user']}).exec(function (err, users){ 

    var userArray = []; 

    for (var i=0; i< users.length; i++) userArray.push(users[i].user); 

    Video.find({ where: {creator: userArray}, limit: 10, sort: 'createdAt DESC' }).exec(function (err, videos){ 
     // videos should contain the desired result 
    }); 
}); 

Я думаю, что в соответствии с waterline docs вызов, как это должно работать, однако, как представляется, не получить никаких результатов.

Я что-то не так? Существует ли другой подход, который привел бы к желаемому результату эффективным образом?

ответ

1

Ничего, он действительно работает. Я допустил ошибку в другом месте в своем коде, но после того, как я ее исправил, у меня появился пример для работы. Может быть, это еще полезно для кого-то другого.

Смежные вопросы