Neo4j数据库操作函数详解
在处理图数据库时,Neo4j是一个广泛使用的工具。本文将详细介绍几个用于操作Neo4j数据库的函数,包括获取关系类型、属性键、按ID搜索节点、按标签或属性搜索节点以及搜索关系等功能。
1. relationTypes函数
此函数用于返回Neo4j数据库中的所有关系类型。
1.1 语法
rtypes = relationTypes(neo4jconn)
1.2 描述
使用Neo4j数据库连接
neo4jconn
,该函数会返回数据库中的所有关系类型。你可以利用这些关系类型来检索整个图或搜索子图。
1.3 示例
以下是获取所有关系类型的示例代码:
url = 'http://localhost:7474/db/data';
username = 'neo4j';
password = 'matlab';
neo4jconn = neo4j(url,username,password);
% 检查连接是否成功
neo4jconn.Message
ans =
[]
% 获取所有关系类型
rtypes = relationTypes(neo4jconn)
rtypes = 1×1 cell array
{'knows'}
% 关闭数据库连接
close(neo4jconn)
1.4 输入参数
-
neo4jconn:Neo4j数据库连接,通过neo4j函数创建的Neo4jConnect对象。
1.5 输出参数
-
rtypes:关系类型,以字符向量的元胞数组形式返回,每个字符向量表示一个关系类型。
2. propertyKeys函数
该函数用于返回Neo4j数据库中的所有属性键。
2.1 语法
propkeys = propertyKeys(neo4jconn)
2.2 描述
使用Neo4j数据库连接
neo4jconn
,此函数会返回数据库中的所有属性键。
2.3 示例
下面是获取所有属性键的示例代码:
url = 'http://localhost:7474/db/data';
username = 'neo4j';
password = 'matlab';
neo4jconn = neo4j(url,username,password);
% 检查连接是否成功
neo4jconn.Message
ans =
[]
% 获取所有属性键
propkeys = propertyKeys(neo4jconn)
propkeys = 15×1 cell array
{'Weight' }
{'EndNodes' }
{'Address' }
{'Department' }
{'title' }
{'name' }
{'Name' }
{'EndDate' }
{'Description'}
{'StartDate' }
{'property' }
{'Date' }
{'Project' }
{'Location' }
{'Title' }
% 关闭数据库连接
close(neo4jconn)
2.4 输入参数
-
neo4jconn:Neo4j数据库连接,通过neo4j函数创建的Neo4jConnect对象。
2.5 输出参数
-
propkeys:属性键,以字符向量的元胞数组形式返回,每个字符向量表示一个属性键。
3. searchNodeByID函数
该函数用于按节点标识符搜索Neo4j数据库中的节点。
3.1 语法
nodeinfo = searchNodeByID(neo4jconn,nodeid)
3.2 描述
使用Neo4j数据库连接
neo4jconn
和节点标识符
nodeid
,此函数会创建一个
Neo4jNode
对象。
3.3 示例
以下是按节点标识符搜索节点的示例代码:
url = 'http://localhost:7474/db/data';
username = 'neo4j';
password = 'matlab';
neo4jconn = neo4j(url,username,password);
% 检查连接是否成功
neo4jconn.Message
ans =
[]
% 搜索节点
nodeid = 2;
nodeinfo = searchNodeByID(neo4jconn,nodeid)
nodeinfo =
Neo4jNode with properties:
NodeID: 2
NodeData: [1×1 struct]
NodeLabels: 'Person'
% 访问节点的属性键和值
nodeinfo.NodeData
ans = struct with fields:
name: 'User2'
% 关闭数据库连接
close(neo4jconn)
3.4 输入参数
-
neo4jconn:Neo4j数据库连接,通过neo4j函数创建的Neo4jConnect对象。 -
nodeid:节点标识符,可以是数值标量(用于搜索单个节点)或数值向量(用于搜索多个节点)。
3.5 输出参数
-
nodeinfo:节点信息,以Neo4jNode对象的形式返回,可作为搜索Neo4j数据库的起始节点。
4. searchNode函数
该函数用于按节点标签或属性键和值搜索Neo4j数据库中的节点。
4.1 语法
nodeinfo = searchNode(neo4jconn,nlabel)
nodeinfo = searchNode(neo4jconn,nlabel,Name,Value)
4.2 描述
-
nodeinfo = searchNode(neo4jconn,nlabel):使用Neo4j数据库连接neo4jconn,返回具有特定节点标签的节点信息。 -
nodeinfo = searchNode(neo4jconn,nlabel,Name,Value):通过额外的名称 - 值对参数进一步缩小搜索范围。
4.3 示例
以下是按节点标签和属性键值搜索节点的示例代码:
按节点标签搜索
url = 'http://localhost:7474/db/data';
username = 'neo4j';
password = 'matlab';
neo4jconn = neo4j(url,username,password);
% 检查连接是否成功
neo4jconn.Message
ans =
[]
% 搜索具有特定标签的节点
nlabel = 'Person';
nodeinfo = searchNode(neo4jconn,nlabel)
nodeinfo=7×3 table
NodeLabels NodeData NodeObject
__________ ____________ ___________________________________
0 'Person' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
1 'Person' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
2 'Person' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
3 'Person' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
4 'Person' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
5 'Person' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
9 'Person' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
% 访问第一个节点的信息
node = nodeinfo.NodeData(1);
node{1}
ans = struct with fields:
name: 'User1'
% 按行名访问节点信息
nodeinfo.NodeData{'0'}
ans = struct with fields:
name: 'User1'
% 计算第一个节点的出度
degree = nodeDegree(nodeinfo.NodeObject(1),'out')
degree = struct with fields:
knows: 2
% 关闭数据库连接
close(neo4jconn)
按属性键和值搜索
url = 'http://localhost:7474/db/data';
username = 'neo4j';
password = 'matlab';
neo4jconn = neo4j(url,username,password);
% 检查连接是否成功
neo4jconn.Message
ans =
[]
% 搜索具有特定标签和属性值的节点
nlabel = 'Person';
nodeinfo = searchNode(neo4jconn,nlabel,'PropertyKey','name', ...
'PropertyValue','User2')
nodeinfo =
Neo4jNode with properties:
NodeID: 2
NodeData: [1×1 struct]
NodeLabels: 'Person'
% 访问节点信息
nodeinfo.NodeData
ans = struct with fields:
name: 'User2'
% 计算节点的出度
degree = nodeDegree(nodeinfo,'out')
degree = struct with fields:
knows: 1
% 关闭数据库连接
close(neo4jconn)
4.4 输入参数
-
neo4jconn:Neo4j数据库连接,通过neo4j函数创建的Neo4jConnect对象。 -
nlabel:Neo4j数据库节点标签,可以是字符向量或字符串标量。
4.5 名称 - 值对参数
-
PropertyKey:属性键,以字符向量或字符串标量形式指定。 -
PropertyValue:属性值,以字符向量或字符串标量形式指定。
4.6 输出参数
-
nodeinfo:节点信息,对于单个节点以Neo4jNode对象形式返回,对于多个节点以表格形式返回。表格包含以下变量: -
NodeLabels:包含每个数据库节点标签的字符向量元胞数组。 -
NodeData:包含节点信息(如属性键)的结构体元胞数组。 -
NodeObject:每个数据库节点的Neo4jNode对象。表格的行名是每个数据库节点的Neo4j节点标识符。
5. 函数操作流程总结
下面是这些函数操作的流程图:
graph LR
A[创建Neo4j连接] --> B{选择操作}
B -->|获取关系类型| C[relationTypes函数]
B -->|获取属性键| D[propertyKeys函数]
B -->|按ID搜索节点| E[searchNodeByID函数]
B -->|按标签或属性搜索节点| F[searchNode函数]
C --> G[关闭连接]
D --> G
E --> G
F --> G
通过以上介绍,你可以利用这些函数对Neo4j数据库进行各种操作,包括获取关系类型、属性键,以及搜索节点等。这些操作对于探索图数据库结构和进行数据查询非常有用。
6. searchRelation函数
该函数用于搜索Neo4j数据库中节点的关系。
6.1 语法
relinfo = searchRelation(neo4jconn,nodeinfo,direction)
relinfo = searchRelation(neo4jconn,nodeinfo,direction,Name,Value)
6.2 描述
-
relinfo = searchRelation(neo4jconn,nodeinfo,direction):使用Neo4j数据库连接,从起始节点nodeinfo开始,根据指定的关系方向返回关系信息。可通过searchNode或searchNodeByID函数找到起始节点。 -
relinfo = searchRelation(neo4jconn,nodeinfo,direction,Name,Value):通过一个或多个名称 - 值对参数指定额外的搜索选项。例如,'RelationTypes', {'works with'}可返回类型为works with的关系信息。
6.3 示例
以下是不同搜索场景的示例代码:
搜索入边关系
url = 'http://localhost:7474/db/data';
username = 'neo4j';
password = 'matlab';
neo4jconn = neo4j(url,username,password);
% 检查连接是否成功
neo4jconn.Message
ans =
[]
% 获取起始节点
nodeid = 3;
nodeinfo = searchNodeByID(neo4jconn,nodeid);
% 搜索入边关系
direction = 'in';
relinfo = searchRelation(neo4jconn,nodeinfo,direction)
relinfo = struct with fields:
Origin: 3
Nodes: [2×3 table]
Relations: [1×5 table]
% 访问节点表
relinfo.Nodes
ans=2×3 table
NodeLabels NodeData NodeObject
__________ ____________ ___________________________________
1 'Person' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
3 'Person' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
% 访问关系表
relinfo.Relations
ans=1×5 table
StartNodeID RelationType EndNodeID RelationData RelationObject
___________ ____________ _________ ____________ ____________________________
3 1 'knows' 3 [1×1 struct] [1x1 database.neo4j.http.Neo
% 关闭数据库连接
close(neo4jconn)
按类型和距离搜索关系
url = 'http://localhost:7474/db/data';
username = 'neo4j';
password = 'matlab';
neo4jconn = neo4j(url,username,password);
% 检查连接是否成功
neo4jconn.Message
ans =
[]
% 获取起始节点
nodeid = 3;
nodeinfo = searchNodeByID(neo4jconn,nodeid);
% 搜索入边关系,按类型和距离筛选
direction = 'in';
reltypes = {'knows'};
relinfo = searchRelation(neo4jconn,nodeinfo,direction, ...
'RelationTypes',reltypes,'Distance',2)
relinfo = struct with fields:
Origin: 3
Nodes: [4×3 table]
Relations: [3×5 table]
% 访问节点表
relinfo.Nodes
ans=4×3 table
NodeLabels NodeData NodeObject
__________ ____________ ___________________________________
0 'Person' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
1 'Person' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
2 'Person' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
3 'Person' [1×1 struct] [1x1 database.neo4j.http.Neo4jNode]
% 访问关系表
relinfo.Relations
ans=3×5 table
StartNodeID RelationType EndNodeID RelationData RelationObject
___________ ____________ _________ ____________ ____________________________
3 1 'knows' 3 [1×1 struct] [1x1 database.neo4j.http.Neo
2 2 'knows' 1 [1×1 struct] [1x1 database.neo4j.http.Neo
1 0 'knows' 1 [1×1 struct] [1x1 database.neo4j.http.Neo
% 关闭数据库连接
close(neo4jconn)
以有向图形式返回关系信息
url = 'http://localhost:7474/db/data';
username = 'neo4j';
password = 'matlab';
neo4jconn = neo4j(url,username,password);
% 检查连接是否成功
neo4jconn.Message
ans =
[]
% 获取起始节点
nodeid = 3;
nodeinfo = searchNodeByID(neo4jconn,nodeid);
% 搜索出边关系,以有向图形式返回
direction = 'out';
relinfo = searchRelation(neo4jconn,nodeinfo,direction, ...
'DataReturnFormat','digraph')
relinfo =
digraph with properties:
Edges: [2×3 table]
Nodes: [3×3 table]
% 显示有向图的边
relinfo.Edges
ans=2×3 table
EndNodes RelationType RelationData
______________ ____________ ____________
{'3'} {'4'} {'knows'} {1×1 struct}
{'3'} {'5'} {'knows'} {1×1 struct}
% 显示有向图的节点
relinfo.Nodes
ans=3×3 table
Name NodeLabels NodeData
_____ __________ ____________
{'3'} {'Person'} {1×1 struct}
{'4'} {'Person'} {1×1 struct}
{'5'} {'Person'} {1×1 struct}
% 关闭数据库连接
close(neo4jconn)
6.4 输入参数
-
neo4jconn:Neo4j数据库连接,通过neo4j函数创建的Neo4jConnect对象。 -
nodeinfo:起始节点信息,可以是Neo4jNode对象或表示节点标识符的数值标量。 -
direction:关系方向,'in'表示入边关系,'out'表示出边关系。
6.5 名称 - 值对参数
-
RelationTypes:关系类型,可以是字符向量、字符串标量、字符向量元胞数组或字符串数组。 -
Distance:节点距离,为正的数值标量。 -
DataReturnFormat:数据返回格式,'struct'(默认)或'digraph'。
6.6 输出参数
-
relinfo:关系信息,默认以结构体形式返回,包含以下字段: -
Origin:起始节点的节点标识符。 -
Nodes:包含Relations表中每个节点信息的表格,包含NodeLabels、NodeData和NodeObject。 -
Relations:包含Nodes表中节点关系信息的表格,包含StartNodeID、RelationType、EndNodeID、RelationData和RelationObject。
当使用
'DataReturnFormat'
为
'digraph'
时,返回有向图对象。
7. 函数参数总结
| 函数名 | 输入参数 | 名称 - 值对参数 | 输出参数 |
|---|---|---|---|
| relationTypes | neo4jconn | 无 | rtypes(关系类型元胞数组) |
| propertyKeys | neo4jconn | 无 | propkeys(属性键元胞数组) |
| searchNodeByID | neo4jconn, nodeid | 无 | nodeinfo(Neo4jNode对象) |
| searchNode | neo4jconn, nlabel | PropertyKey, PropertyValue | nodeinfo(Neo4jNode对象或表格) |
| searchRelation | neo4jconn, nodeinfo, direction | RelationTypes, Distance, DataReturnFormat | relinfo(结构体或有向图对象) |
8. 操作步骤总结
以下是使用这些函数进行Neo4j数据库操作的一般步骤:
1. 创建Neo4j数据库连接:使用
neo4j
函数,提供URL、用户名和密码。
2. 检查连接是否成功:通过检查连接对象的
Message
属性。
3. 选择合适的函数进行操作:根据需求选择
relationTypes
、
propertyKeys
、
searchNodeByID
、
searchNode
或
searchRelation
函数。
4. 处理函数返回结果:根据函数返回的类型(如元胞数组、结构体、表格或有向图对象)进行相应处理。
5. 关闭数据库连接:使用
close
函数关闭连接。
graph LR
A[创建Neo4j连接] --> B[检查连接状态]
B -->|成功| C{选择函数}
C -->|relationTypes| D[获取关系类型]
C -->|propertyKeys| E[获取属性键]
C -->|searchNodeByID| F[按ID搜索节点]
C -->|searchNode| G[按标签或属性搜索节点]
C -->|searchRelation| H[搜索关系]
D --> I[处理结果]
E --> I
F --> I
G --> I
H --> I
I --> J[关闭连接]
B -->|失败| K[处理连接错误]
通过掌握这些函数的使用,你可以高效地对Neo4j数据库进行操作,满足不同的图数据库探索和查询需求。无论是获取数据库的基本信息,还是进行复杂的节点和关系搜索,这些函数都能提供强大的支持。
超级会员免费看
4047

被折叠的 条评论
为什么被折叠?



