我想知道是否有任何方法可以在SELECT语句中使用多个顶点集。我认为应该可以,因为...为什么不呢?
例如,说我们有这个基本查询:
CREATE QUERY coolQuery(VERTEX<Foo> foo, String bar, String biz) FOR GRAPH cool_graph SYNTAX v2 {
f = {foo};
x = SELECT i
FROM SomeVertex:i -(PathType1>)- f
y = SELECT i
FROM x:i -(<PathType2)- BarVertex:br
WHERE br.id == bar;
z = SELECT i
FROM y:i -(PathType3>.PathType4>)- BizVertex:bz
WHERE bz.id == biz;
PRINT z;
}
现在,这很好而且很花哨,但是如果我知道ID为bar和biz的其他顶点怎么办?我可以在SELECT语句中使用多个已知顶点集吗?这里的目标是通过使用索引的顶点id值,尽快到达最终的SomeVertex集。
这是我的想法:
CREATE QUERY coolQuery2(VERTEX<FooVertex> foo, VERTEX<BarVertex> bar, Vertex<BizVertex> biz) FOR GRAPH cool_graph SYNTAX v2 {
f = {foo};
br = {bar};
bz = {biz};
x = SELECT i
FROM SomeVertex:i -(PathType1>)- f
y = SELECT i
FROM x:i -(<PathType2)- br
z = SELECT i
FROM y:i -(PathType3>.PathType4>)- bz
PRINT z;
}
我收到此语法错误,但在此类型的文档中找不到任何内容在SELECT语句中使用多个已知顶点集的情况。
第1版:
CREATE QUERY coolQuery2(VERTEX<FooVertex> foo, VERTEX<BarVertex> bar, Vertex<BizVertex> biz) FOR GRAPH cool_graph SYNTAX v2 {
OrAccum<BOOL> @hasFoo, @hasBar, @hasBiz;
f = {foo, bar, biz};
result = select t from f:s-((PathType1|PathType2|PathType3):e)-:t
accum case when s == foo then t.@hasFoo += true end,
case when s == bar then t.@hasBar += true end,
case when s == biz then t.@hasBiz += true end
having t.@hasFoo and t.@hasBar and t.@hasBiz;
print result;
}
第2版:
CREATE QUERY coolQuery2(VERTEX<FooVertex> foo, VERTEX<BarVertex> bar, Vertex<BizVertex> biz) FOR GRAPH cool_graph SYNTAX v2 {
OrAccum<BOOL> @hasFoo, @hasBar, @hasBiz;
f = {foo};
br = {bar};
bz = {biz};
fooSet = select t from f-(PathType1)-:t;
barSet = select t from br-(PathType1)-:t;
bizSet = select t from bz-(PathType1)-:t;
result = fooSet intersect barSet intersect bizSet;
print result;
}
在这种情况下,建议使用1,因为它具有更好的并发性,并且仅执行一个SELECT。