——感谢博主 悦光阴 的文章cypher查询入门给了我一定的帮助
熟悉cypher语言
新手在执行neo4j查询时,先要了解一些常识:
1、查询后展示时,选择text格式后所展示的是每个节点的各项属性;table格式所展示的是节点的全部json信息。
2、节点所有的节点形式:
都有三个键:identity、labels、properties:
{
"identity": 13333,
"labels": [
"乡镇"
],
"properties": {
"乡镇id": "5cd1483789730d2fec6a878b",
"乡镇名称": "密云镇",
"乡镇代码": "110118100000"
}
}
3、关系的形式:
{
"identity": 1077341,
"start": 2380,
"end": 5725,
"type": "所在地区",
"properties": {
}
}
查询语言
1、展示所有节点的所有信息
match (n) return n
结果:崩掉(内存直接占用14个G)
2、根据指定的labels,展示某一类节点
match (n:乡镇) return n.乡镇名称
结果:返回 乡镇 的属性:节点的乡镇名称:
也可以根据某一属性值来查询一个具体节点(其中’水电站’是labels,水电站名称属于properties):
match (n:水电站{水电站名称:'李家峡水电站'}) return n
也可以不指定labels(不知道这个实体属于哪一类实体时)
match (n{河流名称:'黄河'}) return n
2.1、返回某个实体的某项属性(已知labels、属性中的名称)
match (n:河流{河流名称:'黄河'}) return n.`河流面积`
3、找所有跟三峡大坝有关的其他节点,’三峡大坝’是实体的某一属性名
match(directory{大坝名称:’三峡大坝’})——(en)return en
返回的是两个节点(有id标识)
3.1试试去掉directory:
match ({大坝名称:'三峡大坝'})--(en) return en
效果和有directory相同
3.2 匹配检索(比3.1更加严格,多了河流这个标签的约束):
match (:河流{河流名称:'黄河'})--(en) return en
结果有52个(包含各种省份、装机容量、水库简介、水库代码、湖泊代码、湖泊简介、大坝名称等)
4 涉及where的限制
match ({河流名称:'黄河'})-[:`所在地区`]->(loc)
where loc.省份名称='山西省' or loc.省份名称='青海省'
return loc
5 关系——比如说我想找内蒙古和黄河的关系:
match (:河流{河流名称:'黄河'})-[r]->(:省{省份名称:'内蒙古自治区'})
return r,type(r)
note:在——之后有没有>都可以,但如果要使用<——,则需要把两个实体反过来放
6 实体相关的函数:
return id( )
return type( ) # 关系类型
return labels( ) # 节点标签
return keys( ) # 节点/关系 的属性键
return properties( ) # 节点/关系 的属性
7 关系的模式
变长路径的模式
8 属性——知道一个属性,返回所有拥有此属性的实体
MATCH (n) WHERE EXISTS(n.`是否为正式主题词`) RETURN n
8.1 更进一步——根据属性返回拥有此属性的实体种类
MATCH (n) WHERE EXISTS(n.`简介`) RETURN labels(n)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。