我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

接着对neo4jgraphql的第一个例子做解读,本文着重解读gql中定义的结构、neo4j中的节点及关系、graphql中的衍生接口中的对应关系。当然,graphql的接口衍生的太多(不得不诟病一下),本身的结构还是挺清晰明了的。

苏南大叔:neo4j结合graphql,解读 gql / cql / graphql 之间的关系 - 解读 gql - cql - graphql 之间的关系
neo4j结合graphql,解读 gql / cql / graphql 之间的关系(图7-1)

大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文还是继续解读neo4j+graphql的第一个例子migration。测试环境:@neo4j/graphql@3.12.0neo4j-driver@5.1.0apollo-server@3.10.3neo4j@4.4.10node@16.14.2

基本资料

测试代码地址:

苏南大叔:neo4j结合graphql,解读 gql / cql / graphql 之间的关系 - example-migration
neo4j结合graphql,解读 gql / cql / graphql 之间的关系(图7-2)

neo4j browser的地址:

apollo server提供的graphiql的地址:

本文截图中的节点的创建,请参考:

gql定义

原版的定义内容如下:

苏南大叔:neo4j结合graphql,解读 gql / cql / graphql 之间的关系 - gql定义
neo4j结合graphql,解读 gql / cql / graphql 之间的关系(图7-3)

这个定义中,一共定义了三个类型,分别是:MovieReviewUser
对应于neo4j的话,就是三个节点类型(MovieReviewUser)。
对于graphql来说,就是六组操作。既(querymutation)和(MovieReviewUser)的排列组合。

user类型

这个user类型的定义,是最简单的。定义如下:

type User {
    username: String!
    reviews: [Review!]! @relationship(type: "AUTHORED", direction: OUT)
}
authored:著作、写作、编写。

neo4j里面进行解释的话,就是:

  • User标签的系列节点,有一个字符串类型的username属性。
  • Review标签的系列节点,它和User标签的节点,是一(User)对多(Review)的。
  • 两者之间的关系是:(:User)->[:AUTHORED]->(:Review)

苏南大叔:neo4j结合graphql,解读 gql / cql / graphql 之间的关系 - user类型
neo4j结合graphql,解读 gql / cql / graphql 之间的关系(图7-4)

graphql里面显示的话,和User有关的查询接口有:

大类接口名称说明
queryusers查询所有User
queryusersAggregate查询User数量
queryusersConnection分页查询User
mutationcreateUsers创建Users
mutationdeleteUsers删除Users
mutationupdateUsers更新Users

Movie类型

type Movie {
    title: String!
    reviews: [Review!]! @relationship(type: "HAS_REVIEW", direction: OUT)
    averageRating: Float!
        @cypher(
            statement: """
            MATCH (this)-[:HAS_REVIEW]->(r:Review)
            RETURN avg(r.rating)
            """
        )
}

苏南大叔:neo4j结合graphql,解读 gql / cql / graphql 之间的关系 - movie类型
neo4j结合graphql,解读 gql / cql / graphql 之间的关系(图7-5)

标签为Movie的节点,

  • 有个title的字符串属性。
  • Movie标签节点和Review的标签节点的关系是:(:Movie)->[:HAS_REVIEW]->(:Review)
  • 有个averageRating的浮点数属性,但是它是通过cql运算获得的。

graphql里面显示的话,和Movie有关的查询接口有:

大类接口名称说明
queryMovies查询所有Movie
queryMoviesAggregate查询Movie数量
queryMoviesConnection分页查询Movie
mutationcreateMovies创建Movies
mutationdeleteMovies删除Movies
mutationupdateMovies更新Movies

Review类型

type Review {
    id: ID! @id
    rating: Float!
    createdAt: DateTime!
    content: String!
    author: User! @relationship(type: "AUTHORED", direction: IN)
    movie: Movie! @relationship(type: "HAS_REVIEW", direction: IN)
}

苏南大叔:neo4j结合graphql,解读 gql / cql / graphql 之间的关系 - review类型
neo4j结合graphql,解读 gql / cql / graphql 之间的关系(图7-6)

根据经验,这个标签为Review的节点,拥有ratingcreateAtcontent以及id属性。重点说一下这个id属性,它和节点自带的<id>是不一样的。这里的id: ID! @id是个自动生成的id,类似:216f50b5-08f0-4834-a298-e1c5ea76994a(具体的算法待后续文章解释)。而节点自带的<id>的取值就是单纯的整形数字。

Review具有的neo4j关系是:

  • (:User)->[:AUTHORED]->(:Review)
  • (:Movie)->[:HAS_REVIEW]->(:Review)

苏南大叔:neo4j结合graphql,解读 gql / cql / graphql 之间的关系 - 关系图
neo4j结合graphql,解读 gql / cql / graphql 之间的关系(图7-7)

graphql里面显示的话,和Review有关的查询接口有:

大类接口名称说明
queryReviews查询所有Review
queryReviewsAggregate查询Review数量
queryReviewsConnection分页查询Review
mutationcreateReviews创建Reviews
mutationdeleteReviews删除Reviews
mutationupdateReviews更新Reviews

相关链接

结束语

下面的链接是相关经验文章的合集,请点击查看:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   node    知识图谱