61、Neo4j数据库操作函数详解

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数据库进行操作,满足不同的图数据库探索和查询需求。无论是获取数据库的基本信息,还是进行复杂的节点和关系搜索,这些函数都能提供强大的支持。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值