——感谢博主 悦光阴 的文章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 关系的模式

变长路径的模式
image


8 属性——知道一个属性,返回所有拥有此属性的实体

MATCH (n) WHERE EXISTS(n.`是否为正式主题词`) RETURN n
8.1 更进一步——根据属性返回拥有此属性的实体种类
MATCH (n) WHERE EXISTS(n.`简介`) RETURN labels(n)

略多
1 声望0 粉丝

可傻了!