CREATE (dept:Dept { deptno:10,dname:"Accounting",location:"Hyderabad" })
MATCH (dept: Dept)RETURN dept.deptno,dept.dname
例如:本示例演示如何使用属性和这两个节点之间的关系创建两个节点。
我们将在以下步骤中处理此示例:
CREATE (e:Customer{id:"1001",name:"Abc",dob:"01/10/1982"})MATCH (e:Customer)RETURN e.id,e.name,e.dobCREATE (cc:CreditCard{id:"5001",number:"1234567890",cvv:"888",expiredate:"20/17"})MATCH (cc:CreditCard)RETURN cc.id,cc.number,cc.cvv,cc.expiredate
基于方向性,Neo4j关系被分为两种主要类型。
MATCH (e:Customer),(cc:CreditCard) CREATE (e)-[r:DO_SHOPPING_WITH ]->(cc) MATCH (e)-[r:DO_SHOPPING_WITH ]->(cc) RETURN r
MATCH (cust:Customer),(cc:CreditCard) CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc) RETURN r
CREATE (fb1:FaceBookProfile1)-[like:LIKES]->(fb2:FaceBookProfile2) MATCH (fb1:FaceBookProfile1)-[like:LIKES]->(fb2:FaceBookProfile2) RETURN like
CREATE (video1:YoutubeVideo1{title:"Action Movie1",updated_by:"Abc",uploaded_date:"10/10/2010"})-[movie:ACTION_MOVIES{rating:1}]->(video2:YoutubeVideo2{title:"Action Movie2",updated_by:"Xyz",uploaded_date:"12/12/2012"}) MATCH (video1:YoutubeVideo1)-[movie:ACTION_MOVIES]->(video2:YoutubeVideo2) RETURN movie
这里m是一个节点名
Movie, Cinema, Film, Picture是m节点的多个标签名称
CREATE (m:Movie:Cinema:Film:Picture)
MATCH (cust)-[r:DO_SHOPPING_WITH]->(cc) RETURN cust,cc
MATCH (emp:Employee) WHERE emp.name = 'Abc'RETURN empMATCH (emp:Employee) WHERE emp.name = 'Abc' OR emp.name = 'Xyz'RETURN emp
MATCH (e: Employee) DELETE eMATCH (e: Employee) RETURN e
我们应该使用逗号(,)运算符来分隔节点名称和关系名称
DELETE <node1-name>,<node2-name>,<relationship-name>MATCH (cc: CreditCard)-[rel]-(c:Customer) DELETE cc,c,rel
有时基于我们的客户端要求,我们需要向现有节点或关系添加或删除属性。
Neo4j CQL REMOVE命令用于
Neo4j CQL DELETE和REMOVE命令之间的主要区别 -
从书节点中删除“price”属性
CREATE (book:Book {id:122,title:"Neo4j Tutorial",pages:340,price:250}) MATCH (book { id:122 })REMOVE book.priceRETURN book
MATCH (dc:DebitCard)SET dc.atm_pin = 3456RETURN dc
MATCH (emp:Employee)RETURN emp.empid,emp.name,emp.salary,emp.deptnoORDER BY emp.name DESC
与SQL一样,Neo4j CQL有两个子句,将两个不同的结果合并成一组结果
MATCH (cc:CreditCard)RETURN cc.id as id,cc.number as number,cc.name as name, cc.valid_from as valid_from,cc.valid_to as valid_toUNIONMATCH (dc:DebitCard)RETURN dc.id as id,dc.number as number,dc.name as name, dc.valid_from as valid_from,dc.valid_to as valid_to
LIMIT: 只返回Top的两个结果,因为我们定义了limit = 2。这意味着前两行。
MATCH (emp:Employee) RETURN empLIMIT 2
SKIP: 它只返回来自Bottom的两个结果,因为我们定义了skip = 2。这意味着最后两行。
MATCH (emp:Employee) RETURN empSKIP 2
MERGE命令是CREATE命令和MATCH命令的组合。
Neo4j CQL MERGE命令在图中搜索给定模式,如果存在,则返回结果 如果它不存在于图中,则它创建新的节点/关系并返回结果。
MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})MATCH (gp1:GoogleProfile2) RETURN gp1.Id,gp1.Name
CQL CREATE命令检查此节点是否可用,它只是在数据库中创建新节点。 CQL MERGE命令将新的节点添加到数据库,只有当它不存在。
MATCH (e:Employee) WHERE e.id IS NOT NULLRETURN e.id,e.name,e.sal,e.deptno
MATCH (e:Employee) WHERE e.id IN [123,124]RETURN e.id,e.name,e.sal,e.deptno
MATCH (e:Employee) RETURN e.id,UPPER(e.name),e.sal,e.deptno
它类似于SQL中的GROUP BY子句。
MATCH(e:Employee)RETURN COUNT(*)
以在获取开始节点,结束节点等细节时知道关系的细节。
MATCH (video1:YoutubeVideo1)-[movie:ACTION_MOVIES]->(video2:YoutubeVideo2) RETURN movieMATCH (a)-[movie:ACTION_MOVIES]->(b) RETURN STARTNODE(movie)RETURN ENDNODE(movie)RETURN ID(movie),TYPE(movie)
Neo4J索引操作
CREATE INDEX ON :Customer (name)DROP INDEX ON :Customer (name)
CREATE CONSTRAINT ON (cc:CreditCard)ASSERT cc.number IS UNIQUEDROP CONSTRAINT ON (cc:CreditCard)ASSERT cc.number IS UNIQUE
参考neo4j docs: https://neo4j.com/docs/
https://neo4j.com/docs/cypher-refcard/current/