what noe4j
图数据库主要用于存储更多的连接数据。例如这样的数据。一个人的家庭群 和他的朋友圈模型。
像这样 这些应用程序包含大量的结构化 半结构化和非结构化的连接数据。 在RDBMS数据库中表示这种非结构化连接数据并不容易。使用RDBMS数据库来存储更多连接的数据 那么它们不能提供用于遍历大量数据的适当性能。 在这些情况下 Graph Database提高了应用程序性能。
Neo4j图数据库遵循属性图模型来存储和管理其数据。
节点和关系都包含属性关系连接节点属性是键值对 例如“name:abc” 节点用圆圈表示 关系用方向键表示。关系具有方向 单向和双向。每个关系包含“开始节点”或“从节点”和“到节点”或“结束节点” 图形数据库数据模型的主要构建块是 节点关系属性
这里我们使用圆圈表示节点。 使用箭头的关系。 关系是有方向性的。 我们可以用Properties 键值对 来表示Node的数据。 在这个例子中 我们在Node的Circle中表示了每个Node的Id属性。
下载 https://neo4j.com/download/
//解压tar -xf neo4j-community-3.4.10-unix.tar.gz NEO4J_HOME /bin/neo4j start//后台启动nohup bin/neo4j start /tmp/neo4j.log 2 1操作
CQL代表Cypher查询语言。 像Oracle数据库具有查询语言SQL Neo4j具有CQL作为查询语言。下面我们来实际操作一波。
访问http://localhost:7474/browser/ 进入控制台。
密码默认是neo4j 登录过后会让你修改密码
CREATE (abel:Abel{name: yang ,age:26,phone:133333})
此命令已创建一个具有3个属性 “name” “age” “phone” 的节点名称“abel” 并分配了一个标签“Abel”。
可以创建多个 节点名称、节点标签、所有属性及属性值都相同的节点。
在Neo4j中 内部有个Id属性 “Id”是节点和关系的默认内部属性。 这意味着 当我们创建一个新的节点或关系时 Neo4j数据库服务器将为内部使用分配一个数字。 它会自动递增。
MATCH我们需要使用MATCH命令与RETURN子句查询或更新子句
MATCH (abel:Abel) RETURN abel //查询节点全部信息MATCH (abel:Abel) RETURN abel.name // 查询节点的name属性值return
RETURN子句。我们应该既MATCH使用或CREATE命令。
关系关系是定向的基于方向性 Neo4j关系被分为两种主要类型。
单向关系双向关系在以下场景中 我们可以使用Neo4j CQL CREATE命令来创建两个节点之间的关系。 这些情况适用于Uni和双向关系。
在两个现有节点之间创建无属性的关系
在两个现有节点之间创建与属性的关系
在两个新节点之间创建无属性的关系
在两个新节点之间创建与属性的关系
在具有WHERE子句的两个退出节点之间创建/不使用属性的关系
每个关系 → 包含两个节点
从节点到节点 创建关系先再创建一个节点 CREATE (an:an{name:“an”,sex:“女”})
//无属性的关系MATCH (an:an),(abel:Abel) CREATE (an) - [l:love] - (abel)//有属性的关系 stopdate 为属性名MATCH (an:an),(abel:Abel) CREATE (an) - [l:love{stopdate:12/12/2100}] - (abel)
已有两个节点 an 和 abel 创建关系 关系名称为love 关系标签为 l 方向为 an 到 abel
查询一下看一下
//无属性的新节点到已有节点创建无属性关系MATCH(abel:Abel) CREATE (tian:tian)-[like:LIKES]- (abel) //有属性的新节点到已有节点创建无属性关系MATCH(abel:Abel) CREATE (tian:tian{name: tians ,age:23,sex: 女 })-[like:LIKES]- (abel) //有属性的新节点到已有节点创建有属性的关系MATCH(abel:Abel) CREATE (tian:tian{name: tians ,age:23,sex: 女 })-[like:LIKES{stopdate:12/12/2100}]- (abel) //无属性的新节点到新节点创建无属性关系CREATE (TT:tian)-[like:LIKES]- (long:LONG)//有属性的新节点到新节点创建无属性关系CREATE (TT:tian{name: tians ,age:24,sex: 女 })-[like:LIKES]- (long:LONG{name: long ,age:25,sex: 男 })//无属性的新节点到新节点创建有属性关系CREATE (TT:tian{name: tians ,age:24,sex: 女 })-[like:LIKES{stopdate:12/12/2100}]- (long:LONG{name: long ,age:25,sex: 男 })where
支持的布尔运算符 AND OR NOT XOR 支持以下的比较运算符 , , , , ,
MATCH(TT:tian),(long:LONG) WHERE TT.age 23 RETURN TT,longDELETE
如果删除的节点有关系的话得先删除关系
//删除关系MATCH (TT:tian)-[like]-(long:LONG) DELETE like//删除节点MATCH(TT:tian) DELETE TT//也可以与where 结合使用MATCH(TT:tian) where TT.age 23 RETURN TTREMOVE
有时基于我们的客户端要求 我们需要向现有节点或关系添加或删除属性。
我们使用Neo4j CQL SET子句向现有节点或关系添加新属性。
我们使用Neo4j CQL REMOVE子句来删除节点或关系的现有属性。
###DELETE和REMOVE命令之间的主要区别
两个命令都应该与MATCH命令一起使用。
使用逗号 运算符来分隔标签名称列表。使用dot 。 运算符来分隔节点名称和标签名称。
//删除节点的属性sexMATCH(TT:tian) REMOVE TT.sex RETURN TTMATCH(long:LONG) REMOVE long:Pictureset
我们需要向现有节点或关系添加新属性。
//节点添加属性 多个属性中间用 隔开match(a:a) set a.phone 234324234234 return aorder by
//“ORDER BY”子句 对MATCH查询返回的结果进行排序。可以按升序或降序进行排序。MATCH (abel:Abel) RETURN abel order by abel.age DESC
与SQL一样 Neo4j CQL有两个子句 将两个不同的结果合并成一组结果
neo4j 还支持 UNION UNION ALL LIMIT skip MERGE IS NOT NULL in等关键字
更多操作示例创建节点
//创建两个节点无属性 创建关系无属性 $ CREATE (abel:NAME)-[name:colleague]- (eiva:NAME) RETURN abel,eiva//创建节点有属性 创建关系有属性$ CREATE (abel:column{id:2,name: abel })-[name:colleague{id:1,name: colleague }]- (eiva:NAME{id:221,name: eiva }) RETURN abel,eiva
查询指定节点
//查询节点类型为 column ,id 221的节点$ MATCH (n:column) where n.id 221 RETURN n LIMIT 1//查询节点类型为 column ,id 221节点的名字属性$ MATCH (n:column{id:221}) RETURN n.name LIMIT 1//查询节点类型为 column ,id 222 和 id 2 的节点$ MATCH (n:column{id:2}), (y:column{id:222}) RETURN n,y LIMIT 1
查询两个现有节点创建关系
//现有节点 创建无属性关系//查询两个类型为column且 id 2 和 id 221 的节点,并创建 n - x 的关系 dataRel 关系类型为 DATA。并返回 n 和 x 节点$ MATCH (n:column{id:2}), (x:column{id:221}) create (n)-[dataRel:DATA]- (x) RETURN n,x LIMIT 1//当然也可以只创建不返回$ MATCH (n:column{id:2}), (x:column{id:221}) create (n)-[dataRel:DATA]- (x)//现有节点 创建有属性关系//查询两个类型为column且 id 2 和 id 221 的节点,并创建 n - x 的关系 dataRel 关系类型为 DATA,属性为 id 和 name。并返回 n 和 x 节点$ MATCH (n:column{id:2}), (x:column{id:222}) create (n)-[dataRel:DATA{id:1,name: 数据 }]- (x) RETURN n,x LIMIT 1//查询多层节点关系 通过当前国王的名字查询下一任国王和皇后match p (a:King)-[r: 传位 ]- (b:King)-[r2: 皇后 *1..]- (c:Queen) where a.name 朱祁镇 return p
更新信息
//更新节点信息MATCH (n:column{id:2}) SET n.comment 测试数据 //更新关系 关系有唯一id MATCH (n)-[r:BusinessRelation{id: rel_col_88 }]- (y) set r.comment 测试2 RETURN n,y LIMIT 25//更新关系 多个属性MATCH (n)-[r:BusinessRelation{id: rel_col_88 }]- (y) set r.comment 测试2 , r.type 2 RETURN n,y LIMIT 25//更新关系信息 关系无唯一idMATCH (n:BusinessColumn{id: col_1 }),(y:BusinessColumn{id: col_2 }) MATCH (n)-[r:BusinessRelation{name: 测试 }]- (y) set r.comment 测试1 RETURN n,y LIMIT 25
删除关系
//删除一个关系Match (n)-[r:BusinessRelation{id: rel_col_88 }]-(y) delete r
清空数据库
//删除节点MATCH (n:King) DELETE n//删除关系和节点MATCH (n:King)-[r]-() DELETE n,r
springboot-neo4j 示例代码 点我
包含 springboot-data-neo4j 和 Cypher 语言操作两种方式
参考 https://www.w3cschool.cn/neo4j/neo4j_id_property.html
本文链接: http://matchlon.immuno-online.com/view-693013.html