说我有两个模型:Post
和Comment
,现在我可以使用Post.findAll()
来获取所有帖子,但我还需要每个帖子的评论数,我可以制作一个循环并使用post.countComments()
来获取计数,但是可以在一个查询中执行此操作吗?感谢
答案 0 :(得分:0)
您可以执行以下操作:
var attributes = Object.keys(Post.attributes);
var sequelize = Post.sequelize;
attributes.push([sequelize.literal('(SELECT COUNT(*) FROM "Comments" where "Comments"."postId" = "Post"."postId")'), 'commentsCount']);
var query = {
attributes: attributes,
include: [{model: Comment}]
}
Post.findAndCountAll(query)
.then(function(posts){
...
})
答案 1 :(得分:0)
sequelize提供的findAndCountAll
方法很有可能
一旦您通过Post.findAndCountAll({include: [{model: Comment, as: 'comments'}]})
进行查询
通过执行post.comments.length
,您可以获取每个帖子的评论计数。
以防万一,如果您想查找一次使用后的次数
Post.findAndCount({where: {id: postId}}, include:[{model: Comments, as: 'comments'}]})
返回{count: <#comments>, rows: [<Post>]}