使用Sails.js水线在多个模型中进行高效的查询

我正试图find一种有效的方法来检索分布在多个模型上的结果。 在我的例子中,我有三种模式:

  • 存储video数据的Video ,包括video的创build者
  • 存储用户数据的用户
  • 存储哪个用户跟随哪个其他用户的跟随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' } } }; 

我意识到,我可以直接将多对多关联存储为“ User Collection ,但是我还会存储其他值,例如用户何时开始关注另一个用户,以及从哪个目的地开始。 此外,我存储了大量类似的数据,我希望保持核心模型,如VideoUser精益。

所以现在我正在试图获得10个最新的video(创builddate时间存储在由createdAt自动添加的createdAt属性),这是由给定用户遵循的用户创build的。

从这个给定的用户开始(让我们叫他queryingUser )我试图让他跟随他的所有用户,并使用它们作为input来searchvideo。 我想像一个电话看起来像这样:

 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 }); }); 

我认为根据水线文件这样的调用应该工作,但是,它似乎没有检索任何结果。

难道我做错了什么? 有没有一种不同的方法能以有效的方式达到预期的效果?

没关系,它确实有效。 我在代码的其他地方犯了一个错误,但是在我修复之后,我得到了这个例子。 也许这对别人还是有帮助的。