2017-09-03 18 views
1

グラフの 'user'ラベルの下に追加するユーザ名の配列(例えば、['abc','def','ghi'])があります。Gremlin - 存在しない場合にのみ頂点を追加します。

私は、最初にユーザー名がすでに存在するかどうかを確認し(g.V().hasLabel('user').has('username','def'))、usernameプロパティが 'user'ラベルのものと一致しないものだけを追加したいとします。

また、これは単一のgremlinクエリまたはgroovyスクリプトで行うことができますか?

私はタイタングラフデータベース、tinkerpop3とgremlin RESTサーバーを使用しています。

答えて

5

「スクリプト」を使用すると、実行する処理を得るために、マルチライン/コマンドスクリプトをサーバーに渡すことができます。この質問は、通常のプログラミング技術は、変数を使用して答えているのif/then文など:

t = g.V().has('person','name','bill') 
t.hasNext() ? t.next() : g.addV('person').property('name','bill').next() 

または多分:

g.V().has('person','name','bill').tryNext().orElseGet{ 
    g.addV('person').property('name','bill').next()} 

しかし、これらは、グルーヴィーなスクリプトと、最終的TinkerPopがでスクリプトやクロージャを避けることをお勧めします純粋なトラバースを支持する。

gremlin> g.V().has('person','name','bill').fold(). 
......1> coalesce(unfold(), 
......2>   addV('person').property('name','bill')) 
==>v[18] 
+0

私は自分のnodejsサーバからgremlinを呼び出すようにしています。 200人のユーザーを追加する必要がある場合は、上記のコマンドを200回呼び出す必要がありますか?そして、例外やエラーが発生した場合、どのように処理すればよいのですか?このようなシナリオで正しいアプローチを教えてください。 –

+0

RESTとスクリプトの使用を約束している場合は、最後のステートメントを200人のユーザーを処理するスクリプトに変換してください。ユーザーが200人のユーザーのリストを持つパラメーターである場合、users.each {gV()。has(.....} 'と表示され、RESTとバッチアプローチではバッチ全体が成功するか失敗します。何か他のものが必要な場合は、スクリプトを修正して、ループ内にtry/catchを入れて別の方法を進めてください。スクリプトでは、基本的に必要なものをすべて実行します。 –

関連する問題