Я пытаюсь создать пару (действие) -> (состояние) таким образом, чтобы, если:
- действие существует, используйте его вместо создания нового
- состояние существует, используйте его вместо создания нового
и сделать это одним запросом.
Тот, который у меня есть, создает новый узел действия, если состояние отличается от предыдущих вызовов. В итоге я получаю несколько одинаковых узлов действия.
query = "merge (:state {id:%s})-[:q {q:%s}]->(:action {id:%s})" % (state, 0, action)
Я использую радиограф.
Единственный способ - использовать 3 запроса вместо 1 для достижения этой цели:
graph.query mem 'merge (:state {id:9})'
graph.query mem 'merge (:action {id:9})'
graph.query mem 'match (s:state), (a:action) where s.id = 9 and a.id = 9 create (s)-[:q {q:0.3}]->(a)'