我正在特别处理两个表。用户和朋友。用户拥有大量定义用户的信息,而“朋友”除了ID之外还有两列:user_id和friend_id,这两个列都是对User表的引用。
我正在尝试在对数据库的尽可能少的调用中找到所有用户朋友,而我目前有2个。一个首先从请求中检索用户的ID,然后另一个从我的朋友那里比较来自第一个呼叫的ID,然后是第三个呼叫的ID,这些ID传递朋友数组并在Users表中找到所有ID。这已经感觉有些矫kill过正,我认为与协会建立联系必须有更好的方法。
不幸的是,不能修改表。
我从“ http://docs.sequelizejs.com/manual/querying.html#relations---associations”中看到的一件事
我尝试了一个错误,但是遇到了一个有趣的错误。.当尝试重新使用“关系/关联”下的链接中的代码段时,我得到“用户多次与朋友关联。要确定正确的关联,您必须使用'as '关键字,以指定要包含的关联的别名。“
const userRecord = await User.findOne({
where: { id }
})
const friendsIDs = await Friends.findAll({
attributes: ["friend_id"],
where: {
user_id: userRecord.id
}
}).then(results => results.map(result => result.friend_id));
const Sequelize = require("sequelize");
const Op = Sequelize.Op;
return await User.findAll({
where: {
id: { [Op.in]: friendsIDs }
},
});
在我的用例中,以上工作有效。我只是想知道是否有办法减少对数据库的调用次数。
答案 0 :(得分:0)
结果证明,如果您拥有适当的关联关系,Sequelize会为您处理此问题,因此,是的,这是一个衬里用户。对我而言,getFriends()。