Gremlin:Return 在查询中创建了新边而不保存它们(相当于 APOC vRelationship)

Gremlin: Return new edges created in a query without saving them (equivalent to APOC vRelationship)

我有一个包含两种类型节点的图表:人物和房屋。在这个图中,人可以卖房子(SELLS 关系),而房子是由人买的(IS_BOUGHT_BY 关系)。这可以表示为下图:

(Person_1)-[:SELLS]->(House_1)-[:IS_BOUGHT_BY]->(Person_2)

可以通过 运行:

在 Neo4j 中创建此图的基本示例
CREATE(Person_1: Person {name:'Person 1'})
CREATE(House_1: House {name:'House 1', deal: 10238})
CREATE(Person_2: Person {name:'Person 2'})

CREATE
(Person_1)-[:SELLS]->(House_1),
(House_1)-[:IS_BOUGHT_BY]->(Person_2)

或者可以通过执行以下命令在 Gremlin 中创建:

g.
 addV('Person').property('name', 'Person 1').as('p1').
 addV('House').property('name', 'House 1').property('deal', 10238).as('h1').
 addV('Person').property('name', 'Person 1').as('p2').
 addE('SELLS').from('p1').to('h1').
 addE('IS_BOUGHT_BY').from('h1').to('p2')

我想查询 returns 这些 Person 节点与一条名为 SELLS_HOUSE_TO 的假边相连,而不将这种关系保存在数据库中。此外,此 SELLS_HOUSE_TO 关系必须具有交易 属性 人 1 出售并由人 2 购买的房屋的交易 ID。换句话说,我希望查询的输出遵循下图:

(Person_1)-[:SELLS_HOUSE_TO {deal: house_1_deal}]->(Person_2)

其中id_dealHouse_1节点的交易属性,通过SELLS和[连接Person_1Person_2 =17=] 关系。

使用 APOC 库提供的 vRelationship 函数可以在 Neo4j 中轻松完成此查询:

MATCH (p1: Person)-[r1:SELLS]->(h1: House)-[r2:BUYS]->(p2: Person)
CALL apoc.create.vRelationship(p1, 'SELLS_HOUSE_TO', {deal: h1.deal}, p2) YIELD rel
RETURN p1, rel, p2

是否可以在 Gremlin 中执行类似的操作,而无需在某些步骤中将边存储在数据库中?

目前,除了可能使用 in-line 代码 (closure/lambda) 之外,Gremlin 无法将虚拟边缘注入查询结果。这可能是一个很好的功能请求,可以在 this location.

作为 Apache Tinkerpop 的 Jira 票证打开

作为一个短期解决方案,我认为你能做的最好的事情就是为可视化的需要创建边,也许给他们一个独特的 属性 键和值,比如 "virtual":true并在不再需要时删除这些边。