2015-10-17 69 views
1

我正试图找到一种有效的方式来检索遍布多个模型的结果。在我的例子,我有三个型号:使用Sails.js水线的几个模型的高效查询

  • 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' 
    } 
    } 
}; 

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

因此,现在我试图获取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

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