TinkerPop:边缘过滤未与边缘连接

时间:2018-04-30 05:29:51

标签: gremlin tinkerpop3

示例数据库:TinkerPop Modern

目标:查找尚未开发软件的人。

即。顶点类型“人物”未直接连接到顶点类型“软件”

与软件相关的人 [作品]

g.V().hasLabel("Person").as("from")
.project("title", "node")
    .by(select("from").unfold().values("name").fold())
    .by(select("from").unfold().label().fold())

查找未与软件连接的人 [无效]

g.V().hasLabel("Person").as("from")
.filter(both().not(hasLabel("Software")))
.project("title", "node")
    .by(select("from").unfold().values("name").fold())
    .by(select("from").unfold().label().fold())

我认为它忽略了一个不满足条件的边缘,但是没有跳过顶点。

试图做一个循环,但没有找到它的例子。

Cypher Query等效项(仅供参考):MATCH(n:People)WHERE NOT(n) - (:Software)RETURN n

示例数据库:

enter image description here

1 个答案:

答案 0 :(得分:1)

我认为您只需要更改过滤条件:

gremlin> g.V().hasLabel('person').
......1>   filter(__.not(outE('created'))).
......2>   project("title", "node").
......3>     by('name').
......4>     by(label)
==>[title:vadas,node:person]

正如您所看到的,您也无需出于任何原因选择返回as()步骤 - 您已将该顶点作为project()中的当前遍历。