订阅一个GraphQL项目

时间:2017-10-01 16:33:32

标签: graphql graphcool graphql-subscriptions

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

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

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

1 个答案:

答案 0 :(得分:1)

filter capabilities known from the Simple API也可以在Subscription API中使用。您可以使用node对象中的filter属性进行此操作。以下是有效订阅过滤器的一些示例:

订阅创建的照片

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

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

订阅创建的照片和对某些照片领域的更新

在收听更新时,我们可以进一步指定仅使用updatedFields_containsupdatedFields_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
    }
  }
}