我正在尝试找到一种有效的方法来检索分布在多个模型中的结果。在我的例子中,我有三个模型:
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
精简。
所以现在我正在尝试获取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这样的调用应该可行,但是,它似乎无法检索任何结果。
我做错了吗?是否有一种不同的方法能够以有效的方式产生预期的结果?
答案 0 :(得分:1)
没关系,它确实有效。我在我的代码中的其他地方犯了一个错误,但在我修复之后我得到了一个工作的例子。也许这对其他人来说仍然有用。