Javascript sequelize-获取包含模型的平均值
我有一个类似于Javascript sequelize-获取包含模型的平均值,javascript,mysql,node.js,sequelize.js,Javascript,Mysql,Node.js,Sequelize.js,我有一个类似于product:{…,ratings:[{rating:3}]}的模式,我想使用sequalize添加属性product.avg_rating使用sequelize 这是我的代码: sequelize.models.product.findAll({ include: [{ model: sequelize.models.rating, as: 'ratings', attributes: { include:
product:{…,ratings:[{rating:3}]}
的模式,我想使用sequalize添加属性product.avg_rating
使用sequelize
这是我的代码:
sequelize.models.product.findAll({
include: [{
model: sequelize.models.rating,
as: 'ratings',
attributes: {
include: ['rating',[sequelize.fn('AVG', 'ratings.rating'), 'avg_rating']]
},
group: ['rating.rating'],//also tried ratings.rating, and just rating
}],
}).then(products=>{...})
但我一直收到这个错误:
在没有分组依据的聚合查询中,选择列表的表达式#1
包含未聚合的列“text_rewriter.languagecomposition.id”;
这与sql\u mode=only\u full\u group\u by不兼容
目标输出:
products: [
{product: 'product name',
...
ratings: [...],
avg_rating: 3.7 //THIS AVG IS WHAT I WANT
},{...}
]
你知道我遗漏了什么吗?我见过很多例子,但没有一个像我发现的那样使用include
sequelize.models.product.findAll({
include: [{
model: sequelize.models.rating,
as: 'ratings',
attributes: ['avg_rating'] //this is column name here
}],
}).then(products=>{...})
这将返回:-
products: [
{product: 'product name',
ratings: [...],
rating : { //here all the attributes you wanted, in this case only 'avg_rating' }
},
{...}
]
但在使用此功能之前,您必须定义产品表和评级表之间的关系
表:产品id、名称
表:评级有id、评级、产品id
在上述情况下,关系将是“rating.belongsTo(product)或product.hasMay(rating)”MySQL实现功能依赖性检测。如果启用了
ONLY\u FULL\u GROUP\u BY SQL
模式(默认情况下),MySQL将拒绝select list、HAVING
条件或ORDER BY
列表引用未在GROUP BY
子句中命名或在功能上依赖于它们的非聚合列的查询
该错误与sql\u模式
有关,您需要在数据库控制台上执行以下命令
SET GLOBAL sql_mode = '';
你解决过这个问题吗?@bob_cobb不,我必须在db电话后解决。