apoc.graph.fromDocument

此过程返回仅能被其他 APOC 过程访问的虚拟节点和关系。有关更多信息,请参阅 虚拟节点与关系(图投影)
详细信息

语法

apoc.graph.fromDocument(json [, config ]) :: (graph)

描述

通过从给定 JSON 文件返回的数据中提取所有 NODE(节点)和 RELATIONSHIP(关系)值,生成一个虚拟子图。

输入参数

名称

类型

描述

json

ANY

用于生成图的 JSON 对象。

config

MAP

{ write = false :: BOOLEAN, labelField = 'type' :: STRING. idField = 'id' :: STRING, generateID = true :: BOOLEAN, defaultLabel = '' :: STRING, skipValidation = false :: BOOLEAN, mappings = {} :: MAP }。默认值为:{}

返回参数

名称

类型

描述

graph(图)

MAP

生成的图。

配置参数

该过程支持以下配置参数

配置参数
名称 类型 默认 描述

write

布尔值 (BOOLEAN)

false

持久化该图,否则返回一个虚拟图。

labelField

STRING

type

用作节点标签的字段名称。

idField

STRING

id

将成为所创建节点 ID 字段的文档字段名称(用于在创建节点间关系时进行节点解析)。

generateId

布尔值 (BOOLEAN)

true

如果缺少 id 字段值,则为其生成一个 UUID。

defaultLabel

STRING

""

如果缺少 label 字段值,则使用提供的默认标签。

skipValidation

布尔值 (BOOLEAN)

false

如果您希望跳过 apoc.graph.fromDocument 中的验证过程。

mappings

MAP<STRING, STRING>

{}

点击下方链接查看更多详细信息。

使用示例

CALL apoc.graph.fromDocument("{'id': 1,'type': 'artist','name':'Genesis','members': ['Tony Banks','Mike Rutherford','Phil Collins'],'years': [1967, 1998, 1999, 2000, 2006],'albums': [{'type': 'album','id': 1,'producer': 'Jonathan King','title': 'From Genesis to Revelation'}]}", {write: false})
YIELD graph AS g
RETURN g.nodes AS nodes, g.relationships AS rels;
结果
节点 rels

[(:Artist {name: "Genesis", id: 1, type: "artist", years: [1967, 1998, 1999, 2000, 2006], members: ["Tony Banks", "Mike Rutherford", "Phil Collins"]}), (:Album {producer: "Jonathan King", id: 1, type: "album", title: "From Genesis to Revelation"})]

[[:ALBUMS]]

使用 labelField 从 JSON 生成虚拟图
CALL apoc.graph.fromDocument("{'id': 1,'type': 'artist','name':'Genesis','members': ['Tony Banks','Mike Rutherford','Phil Collins'],'years': [1967, 1998, 1999, 2000, 2006],'albums': [{'type': 'album','id': 1,'producer': 'Jonathan King','title': 'From Genesis to Revelation'}]}", {write: false})
YIELD graph
RETURN *

结果我们得到了一个包含两个节点和一个关系的虚拟图

apoc.graph.fromDocument 1
使用 labelField 从 JSON 生成虚拟图
CALL apoc.graph.fromDocument('{"id":10,"myCustomType":"labelArtist","name":"Genesis","albums":[{"myCustomType":"labelAlbum","producer":"Jonathan King","id":20,"title":"From Genesis to Revelation"}]}', {labelField: "myCustomType"})
YIELD graph
RETURN *

结果我们得到了一个包含两个节点和一个关系的虚拟图

apoc.graph.fromDocument with label type
使用 labelField 和 idField 从 JSON 生成虚拟图
CALL apoc.graph.fromDocument('{"myCustomType":"labelArtist","name":"Genesis","myCustomId":1,"albums":[{"myCustomType":"labelAlbum","producer":"Jonathan King","myCustomId":1,"title":"From Genesis to Revelation"}]}',
{labelField: "myCustomType", idField: "myCustomId"})
YIELD graph
RETURN *

结果我们得到了一个包含两个节点和一个关系的虚拟图

apoc.graph.fromDocument with label type and id field
使用映射(mappings)从 JSON 生成虚拟图
CALL apoc.graph.fromDocument('{"id":1,"type":"Person","name":"Andrea","sizes":{"weight":{"value":70,"um":"Kg"},"height":{"value":174,"um":"cm"},"array":["foo","bar"]},"books":[{"title":"Flow My Tears, the Policeman Said","released":1974},{"title":"The man in the High Castle","released":1962}]}',
{mappings:{`$`:"Person:Reader{*,@sizes}",`$.books`:"Book{!title, released}"}})
yield graph
RETURN *

结果我们得到了一个包含三个节点和两个关系的虚拟图

apoc.graph.fromDocument with mappings
使用 relMapping 从 JSON 生成虚拟图

我们可以传入一个 relMapping 来自定义关系名称,通过传递一个映射表,将您想要更改的关系作为键传入。例如:

CALL apoc.graph.fromDocument("{'id': 1,'type': 'artist','name':'Genesis','members': ['Tony Banks','Mike Rutherford','Phil Collins'],'years': [1967, 1998, 1999, 2000, 2006],'albums': [{'type': 'album','id': 1,'producer': 'Jonathan King','title': 'From Genesis to Revelation'}]}",
{relMapping: {albums: "CUSTOM_REL"}});
apoc.graph.fromDocument with relMapping