【问题标题】:Query to get data ordered by the number of items in a relation查询以获取按关系中的项目数排序的数据
【发布时间】:2019-05-06 15:04:25
【问题描述】:

假设我有这个典型的数据模型,在许多教程中都使用过:

type User {
  id: ID! @unique
  name: String!
  posts: [Post!]!
}

type Post {
  id: ID! @unique
  title: String!
  content: String!
  published: Boolean! @default(value: "false")
  author: User!
}

我可以构建一个查询来获取一个列表,比如说,有更多帖子的 10 个用户? 基本上我需要通过帖子的“计数”来查询排序……但我还没有找到方法

我们将不胜感激任何帮助

干杯

【问题讨论】:

  • 你去过github.com/prisma/prisma/issues/95线程吗?
  • 我没有。但这是我要的吗?我想要的是让用户按帖子数量排序。所以为每个用户计数(帖子)并按该数字排序。我不认为他们在那个问题上谈论的是同一件事,是吗?

标签: graphql prisma prisma-graphql


【解决方案1】:

正如@shivam-panday 在评论中所说,目前在 Prisma 中没有实现(参见问题:https://github.com/prisma/prisma/issues/95

这条评论特别解释了你的问题:

如果还能够通过“对多”相关字段(根据相关项目的数量)进行排序,那就太好了。

例如,要获得投票最多的前 10 个链接的列表(假设投票是 [Vote!] 类型的相关字段!):

query {
  allLinks(first: 10, orderBy: votes_DESC) {
    id
    url
    description
    _votesMeta {
      count
    }
  }
}

目前,要获得该列表,您必须查询每个链接,然后在客户端对其进行排序/切片,这可能会导致大量过度获取。

有问题的评论:https://github.com/prisma/prisma/issues/95#issuecomment-320433296

【讨论】:

  • 感谢您的回答!是的,这是真的。这就是我所需要的......因为用当前的 Prisma 实现不可能做到这一点,你们能想到的任何解决方法吗?干杯:)
  • 使用 Prisma api,我不确定是否有一种方法不需要检索所有有投票的用户,然后自己进行排序。我认为这不是一个好的解决方案,因为它在您的后端会占用大量资源。但是,您可以使用对数据库的原始访问来查询您的用户并对其进行排序。您将检索他们的 ID,然后执行简单的 Prisma 查询以获取您需要的信息。 (prisma.io/docs/prisma-graphql-api/reference/…)
【解决方案2】:

我遇到了与 Prisma 相同的问题,这是一个主要问题。检索所有用户及其所有帖子,并按帖子数量排序不是一个实用的解决方案。

我能想到的解决方法是跟踪帖子的数量(每次添加/删除时)并将其存储在用户中。

type User {
  id: ID! @unique
  name: String!
  postsCount: Int!
  posts: [Post!]!
}

这样,Prisma 将公开 postsCount 的排序选项。

我不确定 Prisma 2 是否为这个问题提供了合适的解决方案...有人知道吗?

【讨论】:

    猜你喜欢
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2015-02-07
    • 2016-11-20
    • 1970-01-01
    • 2013-12-15
    相关资源
    最近更新 更多