继电器边缘处理相同

时间:2017-01-19 05:22:12

标签: graphql relayjs relay graphql-js

尽管数据不同,但我的一些中继边缘被视为相同。

例如,我想显示推荐电影的列表。根据用户喜欢的演员的事实推荐这些电影。

我希望我的数据是这样的:

{
  "data": {
    "movies": {
      "edges": [
        {
          "node": {
            "name": "Cool Movie 1",
            "myActor": {
              "name": "John Smith"
            }
          },
          "node": {
            "name": "Cool Movie 1", <- Same as movie above, different actor
            "myActor": {
              "name": "Mary Smith"
            }
          }
        }
      ]
    }
  }
}

然而,它为两个节点返回相同的actor。

在我的 resolve()中,我返回一个中继连接。 的生成如下:

let edges = movieIdAndActorIdPairs.map(({movieId, actorId}) => ({
      cursor: //,
      node: async () => {
          const dataRequirements = [getMovie(movieId), getActor(actorId)]
          let [movie, actor] = await Promise.all(dataRequirements)
          movie.myActor = actor
          return movie
      }
}))

当我记录edges时,它会显示正确的myActor,但当我在myActor类型上记录Movie字段时,它们都会成为 John Smith < / em>的

2 个答案:

答案 0 :(得分:0)

个人node缺少id字段,这会导致所有节点(电影)的公共ID值。更新中继存储时,它会存储两个具有相同ID和相同内容的节点。

在此处设置每个节点的ID:

  node: async () => {
      const dataRequirements = [getMovie(movieId), getActor(actorId)]
      let [movie, actor] = await Promise.all(dataRequirements)
      movie.myActor = actor
      movie.id = movieId + actorId;
      return movie
  }

答案 1 :(得分:0)

感谢所有帮助过我的人。

我已尝试过建议的方法,但无法获得所需的数据集。

所以我采用这种方法,actorMovie包含actormovie的单独字段:

{
  "data": {
    "actorMovies": {
      "edges": [
        {
          "node": {
            "movie": {
              name: "Cool Movie 1",
            },
            "myActor": {
              "name": "John Smith"
            }
          },
        }
      ]
    }
  }
}

这消除了重叠ID导致无意分组的担忧。