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

neo4j图数据库中,是由节点和关系所组成的。这些信息又是由节点标签、关系类型、属性等信息所组成的,并且这些最基本的部分在neo4j中,被归类于schema。在neo4j browser左侧中是被特殊列出的信息,在前些篇的文章中,苏南大叔对这些左侧列出的信息有所说明。本文是从代码角度来总结说明这些信息的,仅供参考。

苏南大叔:neo4j图数据库,如何cypher查询标签/类型/属性等信息? - neo4j-schema
neo4j图数据库,如何cypher查询标签/类型/属性等信息?(图11-1)

大家好,这里是苏南大叔的“程序如此灵动”博客,这里介绍苏南大叔和计算机代码的故事。本文介绍使用cypher获得标签、类型、属性等信息,因为使用语句的话,返回的是纯正的数据。这对于程序员来说,是最安心可控的。通过对这些schema信息的观察,可以对整个图有所概况上的了解。本文测试环境:win10neo4j@4.4.5

本文前置阅读文章链接地址:

直观观察一个图

拿到新的图,里面有啥节点,有啥关系?大概的关联情况是什么样的?估计新人都会有这样类似的疑惑。在neo4j browser里面,并不像phpmyadmin一样,可以直观的对数据有所掌控。所以,这种直观傻瓜式的可视化介绍,获得比较有用的信息。

call db.schema.visualization

这条语句可以画出关系图,直观明了介绍当前的图。

苏南大叔:neo4j图数据库,如何cypher查询标签/类型/属性等信息? - visualization
neo4j图数据库,如何cypher查询标签/类型/属性等信息?(图11-2)

获得所有节点标签

match (n) return labels(n)
match (n) return distinct(labels(n))

苏南大叔:neo4j图数据库,如何cypher查询标签/类型/属性等信息? - distinct-label
neo4j图数据库,如何cypher查询标签/类型/属性等信息?(图11-3)

call db.labels

苏南大叔:neo4j图数据库,如何cypher查询标签/类型/属性等信息? - db
neo4j图数据库,如何cypher查询标签/类型/属性等信息?(图11-4)

获得所有关系类型

match (n)-[r]->(m) return distinct type(r)

苏南大叔:neo4j图数据库,如何cypher查询标签/类型/属性等信息? - distinct-r-type
neo4j图数据库,如何cypher查询标签/类型/属性等信息?(图11-5)

call db.relationshipTypes

苏南大叔:neo4j图数据库,如何cypher查询标签/类型/属性等信息? - db-relationship-type
neo4j图数据库,如何cypher查询标签/类型/属性等信息?(图11-6)

获得所有节点属性

match (n) unwind keys(n) as allkeys return distinct allkeys

苏南大叔:neo4j图数据库,如何cypher查询标签/类型/属性等信息? - unwind-keys
neo4j图数据库,如何cypher查询标签/类型/属性等信息?(图11-7)

match (n) return distinct keys(n)
match (n:Person) return distinct keys(n)
keys是属性的键,properties是属性,是键+值,unwind keys(n)作用是把key的数组给打散开。
match (n) return distinct properties(n)
match (n)-[r]->(m) return distinct properties(n)
match (n)-[r]->(m) return distinct properties(m)

上述三个语句的结果可是不一样的,第一条语句是所有的节点,第二条语句是所有的person,第三条语句是全部的movie和小部分的person

苏南大叔:neo4j图数据库,如何cypher查询标签/类型/属性等信息? - 节点属性查询
neo4j图数据库,如何cypher查询标签/类型/属性等信息?(图11-8)

获得所有关系属性

match (n)-[r]->(m) return properties(r)

苏南大叔:neo4j图数据库,如何cypher查询标签/类型/属性等信息? - 关系属性
neo4j图数据库,如何cypher查询标签/类型/属性等信息?(图11-9)

还是那句话,keys是属性的键,所以,两者不一样。

match (n)-[r]->(m) return distinct keys(r)

苏南大叔:neo4j图数据库,如何cypher查询标签/类型/属性等信息? - 关系keys
neo4j图数据库,如何cypher查询标签/类型/属性等信息?(图11-10)

match (n)-[r]->(m) unwind keys(r) as allkeys return distinct allkeys

苏南大叔:neo4j图数据库,如何cypher查询标签/类型/属性等信息? - unwind-keys2
neo4j图数据库,如何cypher查询标签/类型/属性等信息?(图11-11)

参考文献

综述

获得节点标签和关系类型后,就可以比较自信的写相关语句了。再通过对节点或关系的属性进行分析,就可以更加稳妥的全局把控了。更多苏南大叔的cypher相关文章,请点击:

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

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

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

 【绝密】秘籍文章入口,仅传授于有缘之人   neo4j    cypher