Sequelizejs:同时查找所有和计数关联

时间:2017-01-05 04:24:00

标签: node.js orm sequelize.js

说我有两个模型:PostComment,现在我可以使用Post.findAll()来获取所有帖子,但我还需要每个帖子的评论数,我可以制作一个循环并使用post.countComments()来获取计数,但是可以在一个查询中执行此操作吗?感谢

2 个答案:

答案 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>]}