查询以获取按关系中的项目数排序的数据

Posted

技术标签:

【中文标题】查询以获取按关系中的项目数排序的数据【英文标题】: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线程吗? 我没有。但这是我要的吗?我想要的是让用户按帖子数量排序。所以为每个用户计数(帖子)并按该数字排序。我不认为他们在那个问题上谈论的是同一件事,是吗? 【参考方案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 是否为这个问题提供了合适的解决方案...有人知道吗?

【讨论】:

以上是关于查询以获取按关系中的项目数排序的数据的主要内容,如果未能解决你的问题,请参考以下文章

NSSortDescriptor 按核心数据对多关系中的项目数排序

按日期查询DynamoDB

如何先按搜索词排序查询结果,然后按字母顺序?

Sql 查询以获取最多 10 条的最新记录并按提到行排名的字段排序 [关闭]

HashMap的ArrayList或LinkedHashMap的按索引获取项目

CoreData - 按关系批量获取对象以获得更好的性能