【问题标题】:Querying cache by fields other than ID?按ID以外的字段查询缓存?
【发布时间】:2021-08-03 05:06:58
【问题描述】:

我正在将 GraphQL 集成到我的应用程序中,并试图弄清楚这种情况是否可行。

我有一个记录类型的架构和一个从我的服务返回记录列表的查询。架构看起来像:

type Query {
   records(someQueryParam: String!): [Record]!
}

type Record {
   id: String!
   otherId: String!
   <other fields here>
}

我的应用程序中有一些地方需要使用otherId 值访问Record(因为这是我可以访问的全部内容)。目前,我使用otherIdid 值的映射来实现这一点,该值在下载所有Records 后填充。我使用映射从otherIdid,然后使用id 值来索引Record 对象的集合,以避免遍历整个事情。 (在我开始使用 Apollo GQL 之前,这个集合曾经使用单独的 REST 调用来填充。)

如果可能的话,我想删除我对这个映射的依赖。由于 Records 在加载后都在 Apollo 缓存中,因此我只想使用 otherId 值在缓存中查询有问题的 Record。我的服务目前没有这种查找,所以我没有可以并行缓存的现有查询。 (即没有getIdFromOtherId)。

tl;dr:我可以使用对象的 id 以外的其他内容查询我的 Apollo 缓存吗?

【问题讨论】:

    标签: apollo-client react-apollo


    【解决方案1】:

    您不能通过otherId 查询缓存,原因与您不想搜索记录集以找到匹配项的原因相同——id 是项键的一部分,并且没有key Apollo 无法直接访问该项目。 Apollo 的默认缓存是 key-value store,而不是您可以随意查询的数据库。

    可能需要在您的数据源中构建一个查询,以允许在 otherIdid 之间进行映射,显然,在整个记录集中搜索您的项目的效率会非常低。

    【讨论】:

    • 谢谢,这就是我最终采用的方法!这有点令人费解,但它有效并解决了问题。
    猜你喜欢
    • 1970-01-01
    • 2010-12-19
    • 2022-10-01
    • 1970-01-01
    • 2019-02-22
    • 2020-05-01
    • 2019-07-01
    • 2011-05-08
    • 1970-01-01
    相关资源
    最近更新 更多