2

私はPythonを使用してgremlinクエリを実行していますが、これについてはまだ慣れ/学習中です。頂点ラベルAとがあり、 からと呼ばれるBエッジがあるとします。特定の頂点からそのようなエッジを持つ頂点を見つけるには、次のようにします。ABabEdgeB A

g.V()\
    .hasLabel("A")\
    .has("uid", uid)\  # uid is from a variable
    .outE("abEdge")\
    .inV()\
    .toList()

しかし、特定Bの頂点からそのようなエッジを持たない頂点を見つけるにはどうすればよいでしょうか? A

私の本能は、次のことを試すことです。

# Find B edges without an incoming edge from a particular A vertex
gremlin.V()\
    .hasLabel("B")\
    .where(__.not_(inE("abEdge").from_(
        V()\
        .hasLabel("A")\
        .has("uid", uid)
    )))\
    .next()

そして、それは悪いクエリになります(まだどこかわからない)、私はまだGremlinを読んでいますが、時間の制約もあるので、ここで質問しています。誰かが助けることができればgroovy、2つの間で変換するのはそれほど悪くないので、構文を使用するだけでも問題ありません。

私はまだこの技術を学んでいるので、説明も役に立ちます。

アップデート

これが実際の質問で、このウェブサイトに関連していると思います。( A=PersonB=Programming-Language、およびabEdge=knows):

その人 が知らないプログラミング言語はA?

4

1 に答える 1

2

あなたはほとんど答えを持っているようです:

g.V().hasLabel("B"). \
  filter(__.not_(__.in_('abEdge').has("A","uid",uid))). \
  toList()

filter()単一の引数のみを使用する方が好きですが、必要Traversalに応じて置き換えることができると思いますwhere()

于 2020-03-17T11:25:39.880 に答える