2016-06-29 5 views
0

Я изо всех сил в течение достаточно долгого времени, чтобы решить мою проблему, которая, какгном создать край, удовлетворяя кратность ограничения, если нарушается падение существующего края, то создать еще просто создать его

У меня есть график, в котором определены множественность ограничений. При создании нового ребра создается либо новый край, либо он может нарушать ограничение множественности из-за измененных данных.

Теперь, когда данные были изменены, мне нужно удалить/удалить существующий край и создать новый. Это моя проблема. Я не могу отбросить и создать ребро в одиночку.

Что я пытался это Я отправляю запрос на сервер gremlin через модуль node-gremlin nodejs. отношение я пытаюсь создать [продавец] -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' } } 

Поток б я пытаюсь достичь этого

Найти, если существующий край присутствует -> удалить существующий край -> Зафиксировать удалить команду край -> создать новый край -> совершить новый край ,

В вышеприведенном запросе я не написал инструкцию фиксации для добавления края, потому что я совершаю добавление ребер навалом.

Я не могу понять, как приступить к решению этой проблемы. любая помощь была бы большой.

ответ

1

Перед выполнением транзакции необходимо выполнить операцию отбрасывания до операции iterate().

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

Это общая блок-камнем и был обсуждалось ранее: Gremlin drop() isn't working via java api