通过 ID 以外的字段查询缓存?

Querying cache by fields other than ID?

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

我有一个记录类型的架构和一个 returns 我的服务记录列表的查询。架构类似于:

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

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

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

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

tl;dr:我可以使用对象的 id 以外的东西查询我的 Apollo 缓存吗?

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

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