2016-10-12 4 views
1

エッジプロパティキーとして時間を持つ2つの頂点間のエッジのリストを取得しています。 例: A - > B(時間= T1、年齢= 20)、A - > B(時間= T2、年齢= 30) ... Iよりも大きいエッジをフェッチする必要がgremlinは時間に基づいてエッジをフィルタリングし、最大値をフェッチします

時間を与えられ、プロパティの最大値を取る '年齢'

コード例:

val end_time = System.currentTimeMillis() - duration 
val r = graph.V().has(ID, name).outE.filter { it: Edge => 
     (it.property(time).value() > end_time) 
    } 
println("r.values("age").max().headOption().get) 

これはオプション[バイト]形式で返します。

これを行うにはより良い方法がありますか?また、私は整数の値が必要です。

答えて

2

まず第一に、あなたは一般的にラムダを使用しないでください: http://tinkerpop.apache.org/docs/current/reference/#a-note-on-lambdas

あなたは次のクエリで特定の最小限の値に基づいてエッジをフィルタリングすることができます:あなたが今したい場合は

g.V().has('ID', 'a').outE().where(values('time').is(gt(end_time))) 

それらのエッジの年齢などのエッジプロパティの最大値を取得するには、単にクエリに追加することができます。

g.V().has('ID', 'a').outE().where(values('time').is(gt(end_time))).values('age').max() 

GremlinBinのデモ: http://gremlinbin.com/bin/view/57ff3da399bc6

+0

答えをありがとう。実際に私のクエリは、タイムスタンプが与えられた時間より長いすべてのエッジで、** age **プロパティの最大値を取得する方法です。この 'graph.V()。has(ID、 'A').outE()。のようなクエリーを修正しました。(_。value(" time ")は(P.gt(end_time)年齢 ")。min()。head'私はバイトを返します。私はIntegerとしてそれを必要とします。どうすればintに変換できますか? – Gopi

+0

私は自分の答えを編集して、フィルタされたエッジの最大年齢を得る方法も含めました。しかし、私は本当にあなたの正しい返品の種類を得ることの問題であなたを助けることはできません。 Gremlinのどのバージョンを使用していますか? –

+0

あなたの質問に「scala」というタグが付いていることに気づいたので、あなたの問題はGremlin-Scalaに固有の問題かもしれません。 –

関連する問題