Как удалить подграф в гремлиновом запросе Tinkerpop (OrientDB)? - PullRequest
0 голосов
/ 17 апреля 2020

Требуется удалить этот подграф, если у меня есть runId и appId. Приложение может иметь несколько таких appId и, следовательно, должно быть удалено, только если к нему не прикреплено appId.

Я пробовал запрос ниже для удаления подграфа, но удаляются только IO и appRun , iRecord & oRecord не будут сброшены. Это потому, что я потерял указатель гремлина? Так что вопрос в том, как удалить iRecord и oRecord.

Я планировал удалить appId во втором вызове обхода. Так что я могу проверить, если appId больше не подключен runId и сбросить appId при том же обходе.

db.getTraversal()
                .V().has("aRun", "runId", runId).as("aRun")
                .outE("hasIO")
                .inV().hasLabel("io").as("io")
                .sideEffect(outE("output").inV().has("oRecord").drop())
                .sideEffect(inE("input").outV().has("iRecord").drop())
                .sideEffect(select("aRun").drop())
                .sideEffect(select("io").drop())
                .iterate();

Я также попробовал версию ответа, предоставленную здесь: Ссылка

db.getTraversal().
  V().has("aRun", "runId", runId)
  emit().
  repeat(out()).
  fold().
  unfold().
  drop()

Но это удалит oRecord, aRun и io, но не iRecord. И вопрос о том, как сбросить appId, остается.

Спасибо

Sample Subgraph

пом. xml:

<dependency>
 <groupId>com.orientechnologies</groupId>
 <artifactId>orientdb-gremlin</artifactId>
 <version>3.0.25</version>
</dependency>

1 Ответ

2 голосов
/ 20 апреля 2020

Я использовал этот запрос:

db.getTraversal()
 .V().has("app", "appId", appId).as("app")
 .outE("hasRun")
 .inV().has("aRun", "runId", runId).as("aRun")
 .outE("hasIO")
 .inV().hasLabel("io").as("io")
 .sideEffect(outE("output").inV().hasLabel("oRecord").drop())
 .sideEffect(inE("input").outV().hasLabel("iRecord").drop())
 .sideEffect(select("app").filter(outE("hasRun").count().is(1)).drop())
 .sideEffect(select("aRun").drop())
 .sideEffect(select("io").drop())
 .iterate();

Спасибо!

...