0

次のような、ユーザーのアクティビティのリンクされたリストがあります。

(user)-ACTIVITIES->(activity)-NEXT*->(activity)->...

各アクティビティ ノードは、ソース ノードとターゲット ノードに関連付けられています。

(theSource)<-SOURCE-(activity)-TARGET->(theTarget)

ソースのフィルターを使用して、すべてのアクティビティを取得したいと考えています。ソースノードでフィルタリングするにはどうすればよいですか? source.email = 'someone@email.com' のアクティビティをフィルタリングしたい。このコードは機能しません:/

g.v(1).out('ACTIVITIES')
.as('x')
.out('NEXT')
.loop('x'){it.loops <= 10}{true}
.filter{
    it.out('SOURCE').email == 'someone@email.com'
}

フィルター クロージャーでリンクされたノードを使用してフィルター処理するにはどうすればよいですか? これは良い方法ですか?

よろしく

4

1 に答える 1

2

フィルターでパイプラインを next() する必要があります。そのはず:

.filter{
    it.out('SOURCE').email.next() == 'someone@email.com'
}

がなければ、next決して true を返さないパイプラインで等式を行っています。

追加の提案として、ループのエミット クロージャー (2 つ目) を変更することをお勧めします。エミット クロージャは、パイプをエスケープする項目を制御します。現在のように設定するtrueと、すべてが放出され、フィルターが適用されます。それを行うためのもう少しコンパクトな方法は、トラバーサルを次のようにすることです。

g.v(1).out('ACTIVITIES')
.as('x')
.out('NEXT')
.loop('x'){it.loops <= 10}{it.out('SOURCE').email.next() == 'someone@email.com'}

このようにして、パイプラインの別のステップではなく、emit クロージャーでフィルタリングを処理します。

于 2013-11-09T02:09:34.700 に答える