gremlin在满足多重约束的同时创建边缘,如果违反了删除现有边缘然后创建其他只是创建它

时间:2016-06-29 10:19:31

标签: node.js titan gremlin gremlin-server

我正在努力解决我的问题,比如

我有一个图表,其中定义了多重性约束。创建新边时,可以创建新边,或者由于数据更改而违反多重约束。

现在,当数据发生变化时,我需要删除/删除现有边缘并创建一个新边缘。这是我的问题。我无法一次性放弃并创造边缘。

我一直在尝试的是这个 我通过nodejs的node-gremlin模块将查询发送到gremlin服务器。 我想创造的关系是[商家] -1 - (卖出) - * - > [产品]。在给定方案中,只有1个商家可以销售产品。当其他商家开始销售产品时。我需要更新它以反映它们之间的新关系。情况可能是之前没有人销售它,因此只需要创建新的边缘。最后返回创建的边缘。

29 Jun 13:41:04 - [Error: An edge with the given label already exists on the in-vertex and the label [sells] is in-unique (Error 597)]
29 Jun
 13:41:04 - { text:
'g.V().has(sIdKey,sIdVal).inE(edgeLabel).drop();graph.tx().commit();g.V().has(fIdKey,fIdVal).outE(edgeLabel).inV().has(sIdKey,sIdVal).tryNext().orElseGet{g.V().has(fIdKey,fIdVal).next().addEdge(edgeLabel,g.V().has(sIdKey,sIdVal).next());};',
     params:
       { fIdKey: 'merchant_id',
         fIdVal: 20230,
         sIdKey: 'product_id',
         sIdVal: 184504,
         edgeLabel: 'sells' } }

我想要实现的流程是

查找是否存在现有边缘 - >删除现有边缘 - > commit delete edge命令 - >创造新的优势 - >提出新的优势。

在上面的查询中,我没有为add edge编写commit语句,因为我提交了批量添加边。

我无法弄清楚如何解决这个问题。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

在提交事务之前,您需要{drop}操作iterate()

g.V().has(sIdKey,sIdVal).inE(edgeLabel).drop().iterate(); graph.tx().commit();

这是一个常见的绊脚石,之前已经讨论过:Gremlin drop() isn't working via java api