【发布时间】:2020-09-02 14:45:54
【问题描述】:
我想检查两个节点之间的关系是否存在。如果存在,我想更新属性,否则在指定节点之间添加新关系。一个 groovy 脚本用于从 CSV 文件中读取数据并运行查询。
g.V().has('label_A','A').outE('to').inV().has('label_B','B').hasNext() ? g.V().has('label_A','A').outE('to').as('e').inV().has('label_B','B').select('e').property('created','existed') : g.V().has('label_A','A').as('fromV').V().has('label_B','B').as('toV').addE('to').from('fromV').to('toV').property('created','newAdded')
g.V().has('label_A','A').outE('to').inV().has('label_B','B').hasNext() 即使通过 groovy 脚本运行时,给定两个节点之间存在关系。 gremlin 控制台上的相同命令返回预期的输出。因此,总是会创建新的关系。
还尝试了以下查询
g.V().hasLabel('label_A','A').as('v').V().has('label_B','B').coalesce(__.inE('to').where(outV().as('v')),addE('to').from('v').property('created','newAdded')).property('created','existed')
上述查询无效。没有添加任何关系。
【问题讨论】:
-
几个建议和问题: 1.您可以将 outE('to').inV() 替换为 out('to') 2.您是将 label_A 存储为属性还是顶点标签?如果它是一个顶点标签,那么您的查询可能不正确。如果是顶点标签,您可以将 has('label_A','A') 替换为 hasLabel('A') (b 相同)
-
label_A 不是顶点标签。它是一种财产。由于标签是保留的,我使用的是 label_A。我正在使用 outE('to').inV() 因为可能有很多边缘从 A 到 B、C 等。但我想选择 label_B 的边缘,而不是其他边缘
标签: graph gremlin janusgraph