何时使用 globalIdField

when to use globalIdField

据我所知,当变量被更改时,中继依赖于 nodeDefitions 进行查询。

看起来所有具有 id 字段的对象都应该是有效节点。但是,如果我有这样的数据:

type User {
  id: globalIdField('User'),
  name: String,
  folders: [ Folder ]
}
type Folder {
  id: ???,
  ...
}

数据存储在基于文档的解决方案中,Folder 对象嵌套在 User 对象中。但是 Folder 对象被赋予了一个 id,以便其他一些对象可以在 User 的上下文中引用 Folder 对象。

如果 Folder 实现了 nodeInterface,并使用了 globalIdField,那么我需要想办法从 globalId 中获取 Folder 对象,这意味着我可能必须扫描所有用户才能找到它,有一个数据允许我找到对象的地图,或规范化数据以便文件夹位于它们自己的 table 中。 如果它不实现 nodeInterface,而只是使用字符串作为 id 字段,当我尝试改变 Folder 对象上的某些字段时会发生什么?

这些对象拥有 ID 通常很有用,即使您的数据库中没有直接的真实 ID。例如,如果你想写一个 mutation 来重命名一个文件夹,那么最好有一个全局 ID 来引用这个文件夹。当 UI 在尚未加载的节点上请求一些额外数据时,中继也会在内部使用它们。

为文件夹生成全局 ID 的一种方法是使用前缀并添加用户 ID 以及在用户中识别文件夹的方法,例如:

var folderID = ['folder', userID, folderID].join(':');

每当你想在你的服务器上解析这个 id 时,你在 : 处拆分,通过查看第一部分看到你想要加载一个文件夹,然后通过用户转到正确的文件夹。