postgresql Prisma获取基于单个字段的计数

6ljaweal  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(1)|浏览(133)

我有一个注解表,其中有许多互动。

model comment {
    id          Int      @id @default(autoincrement())
    content     String
    commenterId String

    commenter            User                  @relation("commented", fields: [commenterId], references: [id])
    comment_interactions comment_interaction[]
}

comment_interaction表如下所示

model comment_interaction {
    userId    String
    commentId Int
    state     CommentInteraction
    user      User               @relation(fields: [userId], references: [id])
    comment   comment            @relation(fields: [commentId], references: [id])

    @@unique([userId, commentId])
}

此处状态是CommentInteraction类型枚举。

enum CommentInteraction {
    LIKED
    DISLIKED
}

现在我们需要的是查询comment表,并得到LIKED交互和DISLIKED交互的计数。我只能得到其中一个的计数,如下所示:

const comments = await prisma.comment.findUnique({
    where: { id },
    select: {
        id: true,
        content: true,
        _count: {
            select: {
                comment_interactions: { where: { state: "LIKED" } },
            },
        },
    },
})

但我怎么才能计算出两者的数目呢。

2guxujil

2guxujil1#

现在用棱镜还不可能
要计算comment_interactions,您需要运行第二个查询,如下所示

const count = await prisma.comment_interaction.groupBy({
  by: ["state"],
  where: {
    commentId: id
  },
  _count: {
    state: true,
  },
});

然后将您查询与内容和下面的
否则,您可以执行原始查询,但它不太美观

相关问题