neo4j结合graphql,解读 gql / cql / graphql 之间的关系
发布于 作者:苏南大叔 来源:程序如此灵动~接着对neo4j
和graphql
的第一个例子做解读,本文着重解读gql
中定义的结构、neo4j
中的节点及关系、graphql
中的衍生接口中的对应关系。当然,graphql
的接口衍生的太多(不得不诟病一下),本身的结构还是挺清晰明了的。
大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文还是继续解读neo4j
+graphql
的第一个例子migration
。测试环境:@neo4j/graphql@3.12.0
,neo4j-driver@5.1.0
,apollo-server@3.10.3
,neo4j@4.4.10
,node@16.14.2
。
基本资料
测试代码地址:
neo4j browser
的地址:
apollo server
提供的graphiql
的地址:
本文截图中的节点的创建,请参考:
gql
定义
原版的定义内容如下:
这个定义中,一共定义了三个类型,分别是:Movie
、Review
、User
。
对应于neo4j
的话,就是三个节点类型(Movie
、Review
、User
)。
对于graphql
来说,就是六组操作。既(query
和mutation
)和(Movie
、Review
、User
)的排列组合。
user
类型
这个user
类型的定义,是最简单的。定义如下:
type User {
username: String!
reviews: [Review!]! @relationship(type: "AUTHORED", direction: OUT)
}
authored
:著作、写作、编写。
到neo4j
里面进行解释的话,就是:
User
标签的系列节点,有一个字符串类型的username
属性。Review
标签的系列节点,它和User
标签的节点,是一(User
)对多(Review
)的。- 两者之间的关系是:(:User)->[:AUTHORED]->(:Review)
在graphql
里面显示的话,和User
有关的查询接口有:
大类 | 接口名称 | 说明 |
---|---|---|
query | users | 查询所有User |
query | usersAggregate | 查询User 数量 |
query | usersConnection | 分页查询User |
mutation | createUsers | 创建Users |
mutation | deleteUsers | 删除Users |
mutation | updateUsers | 更新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)
"""
)
}
标签为Movie
的节点,
- 有个
title
的字符串属性。 Movie
标签节点和Review
的标签节点的关系是:(:Movie)->[:HAS_REVIEW]->(:Review)- 有个
averageRating
的浮点数属性,但是它是通过cql
运算获得的。
在graphql
里面显示的话,和Movie
有关的查询接口有:
大类 | 接口名称 | 说明 |
---|---|---|
query | Movies | 查询所有Movie |
query | MoviesAggregate | 查询Movie 数量 |
query | MoviesConnection | 分页查询Movie |
mutation | createMovies | 创建Movies |
mutation | deleteMovies | 删除Movies |
mutation | updateMovies | 更新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)
}
根据经验,这个标签为Review
的节点,拥有rating
、createAt
、content
以及id
属性。重点说一下这个id
属性,它和节点自带的<id>
是不一样的。这里的id: ID! @id
是个自动生成的id
,类似:216f50b5-08f0-4834-a298-e1c5ea76994a
(具体的算法待后续文章解释)。而节点自带的<id>
的取值就是单纯的整形数字。
Review
具有的neo4j
关系是:
- (:User)->[:AUTHORED]->(:Review)
- (:Movie)->[:HAS_REVIEW]->(:Review)
在graphql
里面显示的话,和Review
有关的查询接口有:
大类 | 接口名称 | 说明 |
---|---|---|
query | Reviews | 查询所有Review |
query | ReviewsAggregate | 查询Review 数量 |
query | ReviewsConnection | 分页查询Review |
mutation | createReviews | 创建Reviews |
mutation | deleteReviews | 删除Reviews |
mutation | updateReviews | 更新Reviews |
相关链接
- https://newsn.net/say/neo4j-win.html
- https://newsn.net/say/neo4j-match-node.html
- https://newsn.net/say/graphql-apollo.html
结束语
下面的链接是相关经验文章的合集,请点击查看:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。