概述
使用以下语法在HDC图上执行图查询:
exec{
<query>
} on <hdcGraphName>
HDC图支持更高效率地从数据库查询数据。但请留意,HDC图不支持修改图结构以及插入、更新、删除数据等操作。
示例图集

在一个空图中运行以下语句定义图结构并插入数据:
create().node_schema("entity").edge_schema("link");
create().edge_property(@link, "weight", float);
insert().into(@entity).nodes([{_id:"A"},{_id:"B"},{_id:"C"},{_id:"D"}]);
insert().into(@link).edges([{_from:"A", _to:"B", weight:1},{_from:"A", _to:"C", weight:1.5},{_from:"A", _to:"D", weight:0.5},{_from:"B", _to:"C", weight:2},{_from:"C", _to:"D", weight:0.5}]);
HDC图查询
为全图创建名为hdcGraph
的HDC图:
hdc.graph.create("hdcGraph", {
nodes: {"*": ["*"]},
edges: {"*": ["*"]},
direction: "undirected",
load_id: true,
update: "static",
query: "query",
default: false
}).to("hdc-server-1")
在hdcGraph
上执行查询:
exec{
n({_id == "A"}).e()[2].n({_id == "C"}) as p
return p{*}
} on hdcGraph
结果:p

限制图遍历方向
在创建HDC图时,若direction
选项设定为in
或out
,图遍历会被限制只能沿入边或出边进行。若在查询中从缺失的方向进行遍历,会引发报错或生成空结果。
创建HDC图hdcGraph_in_edges
,其中包含所有点和入边:
hdc.graph.create("hdcGraph_in_edges", {
nodes: {"*": ["*"]},
edges: {"*": ["*"]},
direction: "in",
load_id: true,
update: "static",
query: "query",
default: false
}).to("hdc-server-1")
以下查询试图在hdcGraph_in_edges
上遍历点A
的出边,没有结果返回:
exec{
n({_id == "A"}).re().n() as p
return p{*}
} on hdcGraph_in_edges
HDC图不包含点ID
在创建HDC图时,若load_id
选项设定为false
,则HDC图不包含点的_id
值。若在查询中引用了_id
,则会引发报错或生成空结果。
创建HDC图hdcGraph_no_id
,其中不包含点的_id
值:
hdc.graph.create("hdcGraph_no_id", {
nodes: {"*": ["*"]},
edges: {"*": ["*"]},
direction: "undirected",
load_id: false,
update: "static",
query: "query",
default: false
}).to("hdc-server-1")
以下查询使用_id
过滤hdcGraph_no_id
中的点,由于该HDC图不包含点的_id
,执行报错:
exec{
n({_id == "A"}).e()[2].n({_id == "C"}) as p
return p{*}
} on hdcGraph_no_id
HDC图不包含属性
如果创建HDC图时未包含某些属性,查询引用这些属性时会引发报错或生成空结果。
创建HDC图hdcGraph_no_weight
,其中包含所有点属性,但只包含link
边的系统属性:
hdc.graph.create("hdcGraph_no_weight", {
nodes: {"*": ["*"]},
edges: {"link": []},
direction: "undirected",
load_id: true,
update: "static",
query: "query",
default: false
}).to("hdc-server-1")
以下查询在hdcGraph_no_weight
上查找加权最短路径,以边属性@link.weight
计算权重。由于weight
属性缺失,执行报错:
exec{
ab().src({_id == "A"}).dest({_id == "C"}).depth(2).shortest(@link.weight) as p
return p
} on hdcGraph_no_weight