2017-12-19 8 views
2

グラフに 'name'(文字列)と 'roll-no'(int)プロパティを持つノードが2つあり、グラフに 'A'と 'B'という2つのノードがあるとします。どのようにして、ノードのプロパティ情報を下のフォーマットで取得するためのクエリを書くことができますか?出力にデータ型情報と入れ子構造のjson構造は必要ありません。単純な形式で頂点プロパティ情報を取得する

[{name=[apple], roll-no=[10,20]}, {name=[mango], roll-no=[30]}] 

私はGraphSONを通常のJSONに変換する方法を求めていると思います。

+0

私はtinkerpop3を使用しています。言及を忘れてしまった。 – user1689963

答えて

2

あなたはMapに要素をproject()ことができます。

gremlin> g.V(1).project('name','age').by('name').by('age') 
==>[name:marko,age:29] 

あなたが見ることができるように、このアプローチを取ることは、あなたがのプロパティを制御するようなマップは、よりきめの細かい方法で生産される方法を制御することができますby()ステップモジュレータ。

gremlin> g.V().local(properties().group().by(key()).by(value())) 
==>[name:marko,age:29] 
==>[name:vadas,age:27] 
==>[name:lop,lang:java] 
==>[name:josh,age:32] 
==>[name:ripple,lang:java] 
==>[name:peter,age:35] 

:あなたもこのような何かを行う可能性がありますプロジェクトを使用しない

gremlin> g.V().project('name','age'). 
......1> by('name'). 
......2> by(coalesce(values('age'),constant('none'))) 
==>[name:marko,age:29] 
==>[name:vadas,age:27] 
==>[name:lop,age:none] 
==>[name:josh,age:32] 
==>[name:ripple,age:none] 
==>[name:peter,age:35] 

: - 返された頂点は、均質なプロパティキーをお持ちでない場合は、何らかの方法でそれを考慮する必要がありますここでは一つの可能​​性ですproject()ほど明確ではなく、一般に推奨されていないすべてのプロパティを取得しますが、明らかにそのアプローチが有効です。私はあなたが次のように取得するプロパティを箇条書きすることができたと思います:

gremlin> g.V().local(properties('name','age').group().by(key()).by(value())) 
==>[name:marko,age:29] 
==>[name:vadas,age:27] 
==>[name:lop] 
==>[name:josh,age:32] 
==>[name:ripple] 
==>[name:peter,age:35] 
+0

1つのノードでは動作しますが、複数のノードでは動作しません。 ( 'name')by( 'age') – user1689963

+0

これは複数の頂点に対して機能しますが、特定のプロパティを持たない可能性のある頂点を考慮する必要があります。私の答えは少し更新されました。 –

+0

不足しているプロパティを考慮する必要がある場合は、 'valueMap(" name "、" age ")'を使用するだけです。 'property(...)。group()。by(...)'は私には少し複雑すぎます。 –

関連する問題