Neo4J

安装

值类型

语法

match (n) detach delete n 清空 match (n) return n 清空

create node

MERGE可以防止相同属性的节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE (TheMatrix:Movie {title:The Matrix, released:1999, tagline:Welcome to the Real World})

多标签

CREATE (n:Person:Swedish)

CREATE (
   <node-name>:<label-name>
   { 	
      <Property1-name>:<Property1-Value>
      ........
      <Propertyn-name>:<Propertyn-Value>
   }
)
1
2
3
4
MERGE (keanu:Person { name: Keanu Reeves })
ON CREATE SET keanu.created = timestamp()
ON MATCH SET keanu.lastSeen = timestamp()
RETURN keanu.name, keanu.created, keanu.lastSeen
1
2
3
4
5
6
7
8
9
MERGE (src:Machine {ip: $src_ip})
MERGE (dst:Machine {ip: $dst_ip})
MERGE (src)-[access:Access {proto: $proto, app_proto: $app_proto}]->(dst)
   ON CREATE SET
       access.app_proto=$app_proto,
       access.time=[$timestamp]
   ON MATCH SET
       access.time=access.time + $timestamp
RETURN id(access) 

create relation

create many nodes and relationships at once

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE (js:Person { name: "Johan", from: "Sweden", learn: "surfing" }),
(ir:Person { name: "Ian", from: "England", title: "author" }),
(rvb:Person { name: "Rik", from: "Belgium", pet: "Orval" }),
(ally:Person { name: "Allison", from: "California", hobby: "surfing" }),

(ee)-[:KNOWS {since: 2001}]->(js),(ee)-[:KNOWS {rating: 5}]->(ir),
(js)-[:KNOWS]->(ir),(js)-[:KNOWS]->(rvb),
(ir)-[:KNOWS]->(js),(ir)-[:KNOWS]->(ally),
(rvb)-[:KNOWS]->(ally)


CREATE 
(a:Node {name:"A"}),
(b:Node {name:"B"}),
(c:Node {name:"C"}),
(d:Node {name:"D"}),
(e:Node {name:"E"}),

(a)-[:LINK]->(b)-[:LINK]->(c)-[:LINK]->(d)-[:LINK]->(e)

没有属性的关系与现有节点

现有的节点要先MATCH出来不然会有个空node

1
2
3
4
MATCH (<node1-name>:<node1-label-name>),(<node2-name>:<node2-label-name>)
CREATE  
	(<node1-name>)-[<relationship-name>:<relationship-label-name>]->(<node2-name>)
	

MATCH RETURN

MATCH RETURN 要配合使用

1
2
3
4
5
MATCH (cloudAtlas {title: "Cloud Atlas"}) RETURN cloudAtlas

MATCH (people:Person) RETURN people.name LIMIT 10

MATCH (nineties:Movie) WHERE nineties.released >= 1990 AND nineties.released < 2000 RETURN nineties.title

match relation

找出某个节点所有关联节点 一级关联

1
MATCH (ee:Person)-[:KNOWS]-(friends) WHERE ee.name = "Emil" RETURN ee, friends

二级关联 空()

1
2
3
MATCH (js:Person)-[:KNOWS]-()-[:KNOWS]-(surfer)
WHERE js.name = "Johan" AND surfer.hobby = "surfing"
RETURN DISTINCT surfer

某个label 所有

1
MATCH (ee:Person)-[]-(friends)  RETURN ee, friends

delete and remove

delete 节点和关联关系

1
MATCH (e: Node) where e.name="C" delete e

1
2
MATCH (cc: CreditCard)-[rel]-(c:Customer) 
DELETE cc,c,rel

remove 删除标签和属性

1
2
3
MATCH (book { id:122 })
REMOVE book.price
RETURN book
1
2
MATCH (m:Movie) 
REMOVE m:Picture
1
2
3
MATCH (dc:DebitCard)
SET dc.atm_pin = 3456
RETURN dc

索引

我们可以为具有相同标签名称的所有节点的属性创建索引。

我们可以在MATCH或WHERE或IN运算符上使用这些索引列来改进CQL Command的执行。

1
CREATE INDEX ON :<label_name> (<property_name>)
1
DROP INDEX ON :<label_name> (<property_name>)