4

为我的 GraphQL 后端使用 GraphCool,我想知道如何只订阅给定 ID 的单个项目。我一直在查看文档并尝试使用过滤器,但我仍然无法弄清楚。如果我想订阅所有项目突变,我知道我必须这样做:

subscription {
  Photo{
    node {
      id
      title
      url
    }
  }
}

如何收听具有给定 ID 的项目?

4

1 回答 1

1

简单 API 中已知的过滤器功能也可以在订阅 API 中使用。您可以为此使用对象node内部的属性。filter以下是订阅过滤器的一些示例:

订阅创建的照片

使用mutation_in,我们可以决定是否要监听创建、更新或删除的事件(或它们的混合):

subscription {
  Photo(filter: {
    mutation_in: [CREATED]
  }) {
    node {
      id
      title
      url
    }
  }
}

订阅已创建的照片并更新某些照片字段

在监听更新时,我们可以进一步指定只监听特定字段的更新,使用updatedFields_contains,updatedFields_contains_everyupdatedFields_contains_some:

subscription {
  # we can only use `updatedFields_x` filters together with `UPATED`
  # so we use OR
  Photo(filter: {
    OR: [{
      mutation_in: [UPDATED]
      updatedFields_contains: "title"
    }, {
      mutation_in: [CREATED]
    }]

  }) {
    previousValues {
      title # contains old title
    }
    node {
      id
      title # contains new title
      url
    }
  }
}

订阅某张照片的更新

对于所有订阅查询,我们可以使用 进一步细化订阅条件node。这与用于 的过滤器相同allPhoto,例如:

subscription updatedPhoto($id: ID!) {
  Photo(filter: {
    mutation_in: [UPDATED]
    node: {
      id: $id
    }
  }) {
    previousValues {
      title # contains old title
    }
    node {
      id
      title # contains new title
      url
    }
  }
}
于 2017-10-02T09:52:29.883 回答