美文网首页
Nosql-neo4j-Cypher 语句(2)

Nosql-neo4j-Cypher 语句(2)

作者: Viterbi | 来源:发表于2022-09-16 08:03 被阅读0次

目录: [TOC]

MATCH

  • MATCH 指定匹配模式,查询neo4j数据库
  • MATCH经常和WHERE一块使用
  • MATCH可以在查询的开头或者WITH的后面

下面图用作例子

// 创建节点
CREATE (oliver:Person {name: 'Oliver Stone'}) 
CREATE (michael:Person {name: 'Michael Douglas'}) 
CREATE (charlie:Person {name: 'Charlie Sheen'}) 
CREATE (marlin:Person {name: 'Martin Sheen'}) 
CREATE (rob:Person {name: 'Rob Reiner'}) 
CREATE (WallStreet:Movie {title: 'Wall Street'}) 
CREATE (AmericanPresident:Movie {title: 'The American President'}) 

// 创建关系 
CREATE (oliver)-[:DIRECTED]->(WallStreet)
CREATE (rob)-[:DIRECTED]->(AmericanPresident)

CREATE (michael)-[:ACTED_IN{role:'Gordon Gekko'}]->(WallStreet)
CREATE (charlie)-[:ACTED_IN{role:'Bud Fux'}]->(WallStreet)

CREATE (michael)-[:ACTED_IN{role:'President Andrew Shepherd'}]->(AmericanPresident)
CREATE (marlin)-[:ACTED_IN{role:'Cart Fox'}]->(WallStreet)
CREATE (marlin)-[:ACTED_IN{role:'AJ Maclnemeny'}]->(AmericanPresident)

节点查询

// 获取所有节点
MATCH (n)
RETURN n


// 带标签节点查询
MATCH (movie:Movie)
RETURN movie.title


// 相关的节点查询 ,-- 表示相关,无论是什么类型和方向
MATCH (director { name: 'Oliver Stone' })--(movie)
RETURN movie.title
// "Wall Street"

// 带标签节点查询
MATCH (:Person { name: 'Oliver Stone' })--(movie:Movie)
RETURN movie.title
// "Wall Street"

// 
// 
// 

关系查询

// 外出关系查询,使用 -> 和  <- 表示关系的方向
MATCH (:Person { name: 'Oiver Stone' })-->(movie)
RETURN movie.title
 // "Wall Street"
 
 
// 需要关系可以赋值给变量
MATCH (:Person { name: 'Oliver Stone' })-[r]->(movie)
RETURN type(r)
// "DIRECTED"

// 指定关系类型
MATCH (wallstreet:Movie { title: 'Wall Street' })<-[:ACTED_IN]-(actor)
RETURN actor.name

// 多个关系类型
// 主演或者导演电影的所有人
MATCH (wallstreet { title: 'Wall Street' })<-[:ACTED_IN|:DIRECTED]-(person)
RETURN person.name

// 指定关系,并赋值给变量
MATCH (wallstreet { title: 'Wall Street' })<-[r:ACTED_IN]-(actor)
RETURN r.role

更多关系查询

//类型不是字母或者是空白字符,可以使用反引号 `
创建
MATCH (charlie:Person { name: 'Charlie Sheen' }),(rob:Person { name: 'Rob Reiner' })
CREATE (rob)-[:`TYPE INCLUDING A SPACE`]->(charlie)
查询
MATCH (n { name: 'Rob Reiner' })-[r:`TYPE INCLUDING A SPACE`]->()
RETURN type(r)

//多重关系,使用()--()
MATCH (charlie { name: 'Charlie Sheen' })-[:ACTED_IN]->(movie)<-[:DIRECTED]-(director)
RETURN movie.title, director.name

//可变长关系查询
// -[:TYPE*minHops..maxHops]→
// 默认是1到无穷, 无边际,可以忽略,可以指定固定的长度
MATCH (charlie { name: 'Charlie Sheen' })-[:ACTED_IN*1..3]-(movie:Movie)
RETURN movie.title
//结果
"Wall Street"2
"The American President"3
"The American President"

//多个关系类型且可变长关系
// *minHops..maxHops
MATCH (charlie { name: 'Charlie Sheen' })-[:ACTED_IN|DIRECTED*2]-(person:Person)
RETURN person.name
//结果
"Oliver Stone"2
"Michael Douglas"3
"Marlin Sheen"

//可变长关系并赋值给变量
MATCH p =(actor { name: 'Charlie Sheen' })-[:ACTED_IN*2]-(co_actor)
RETURN relationships(p)
//结果
[:ACTED_IN[0]{role:"Bud Fox"},:ACTED_IN[2]{role:"Gordon Gekko"}][:ACTED_IN[0]{role:"Bud Fox"},:ACTED_IN[1]{role:"Carl Fox"}]


//带属性的可变长路径
// 创建

MATCH (charlie:Person { name: 'Charlie Sheen' }),(martin:Person { name: 'Martin Sheen' })CREATE (charlie)-[:X { blocked: FALSE }]->(:UNBLOCKED)<-[:X { blocked: FALSE }]-(martin)CREATE (charlie)-[:X { blocked: TRUE }]->(:BLOCKED)<-[:X { blocked: FALSE }]-(martin)

//
MATCH p =(charlie:Person)-[* { blocked:false }]-(marlin:Person)
WHERE charlie.name = 'Charlie Sheen' AND marlin.name = 'Marlin Sheen'
RETURN p

//零长度的路径,当长度为零食其节点本身
MATCH (wallstreet:Movie { title: 'Wall Street' })-[*0..1]-(x)
RETURN x

// 命名路径
MATCH p =(michael { name: 'Michael Douglas' })-->()
RETURN p

//有界关系

MATCH (a)-[r]-(b)
WHERE id(r)= 0
RETURN a,b

最短路径

  • 使用shortestPath函数,获取节点之间的最短路径
  • 最大节点经常和最短路径一起使用
  • 最短路径中可以使用条件约束
  • none() or all() 无某种关系,全是某种关系
MATCH (martin:Person { name: 'Marlin Sheen' }),(oliver:Person { name: 'Oliver Stone' }), 
p = shortestPath((martin)-[*..15]-(oliver))
RETURN p

  • 带约束的最短路径,使用WHERE
//Single shortest path with predicates
// 不考虑father/son 的关系
MATCH (charlie:Person { name: 'Charlie Sheen' }),(martin:Person { name: 'Marlin Sheen' }), p = shortestPath((charlie)-[*]-(martin))
WHERE NONE (r IN relationships(p) WHERE type(r)= 'FATHER')
RETURN p

  • 所有最短路径
//
MATCH (martin:Person { name: 'Marlin Sheen' }),(michael:Person { name: 'Michael Douglas' }), 
p = allShortestPaths((martin)-[*]-(michael))
RETURN p

通过id查询节点和关系

  • id() function可以用于限定节点和关系
  • 不推荐使用id约束节点和关系
//用id函数限定节点
MATCH (n)
WHERE id(n)= 0
RETURN n


//关系
MATCH ()-[r]->()
WHERE id(r)= 0
RETURN r

//多个节点
MATCH (n)
WHERE id(n) IN [0, 3, 5]
RETURN n

OPTIONAL MATCH

使用OPTIONAL MATCH 当查询无查询结果时候,返回null OPTIONAL MATCH等价于SQL中的外连接

//可选的关系
MATCH (a:Movie { title: 'Wall Street' })
OPTIONAL MATCH (a)-->(x)
RETURN x

//可选的属性
MATCH (a:Movie { title: 'Wall Street' })
OPTIONAL MATCH (a)-->(x)
RETURN x, x.name

MATCH (a:Movie { title: 'Wall Street' })
OPTIONAL MATCH (a)-[r:ACTS_IN]->()
RETURN a.title, r

本文使用 文章同步助手 同步

相关文章

  • Nosql-neo4j-Cypher 语句(2)

    目录:[TOC] MATCH MATCH 指定匹配模式,查询neo4j数据库 MATCH经常和WHERE一块使用 ...

  • Nosql-neo4j-Cypher 语句 概要

    目录:[TOC] 概要 读子句Reading clauses ClauseDescriptionMATCHSpec...

  • Nosql-neo4j-Cypher 语句 (6)

    目录:[TOC] CALL {} (subquery) 执行子查询并返回结果 子查询必须有RETURN 子查询可以...

  • Nosql-neo4j-Cypher 语句(3)

    目录:[TOC] RETURN RETURN 可以返回节点,关系及属性 WITH WITH语句允许查询链接在一起,...

  • Nosql-neo4j-Cypher 语句(4)

    目录:[TOC] ORDER BY ORDER BY是RETURN和WITH的子查询,对结果进行排序不能对节点关系...

  • Nosql-neo4j-Cypher 语句 (5)

    目录:[TOC] MERGE MERGE确保模式在graph中存在,要么已经存在要么创建MERGE是MATCH和C...

  • 语句

    条件语句 if (条件){语句1}else{语句2} if (条件){语句1}else if(条件2){语句2}e...

  • C# 语句控制

    C# 语句控制 1 选择语句 1.1 if语句 1.2 switch语句 2 迭代语句 2.1 while语句 2...

  • 流程控制

    1、条件语句 1.1 if条件语句 1.2 switch多分支语句 2、循环语句 2.1 while循环语句 2....

  • JS语句

    条件语句 if(条件){语句1;}else{语句2;}条件为true,则取语句1,false则取语句2. var ...

网友评论

      本文标题:Nosql-neo4j-Cypher 语句(2)

      本文链接:https://www.haomeiwen.com/subject/skvdortx.html