You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2016/09/15 11:35:18 UTC
tinkerpop git commit: updated the complex filtering in
traversal-induced-values.asciidoc with a more simple where().by() clause per
@spmallette's request.
Repository: tinkerpop
Updated Branches:
refs/heads/TINKERPOP-1330 be64b529f -> 9949487f3
updated the complex filtering in traversal-induced-values.asciidoc with a more simple where().by() clause per @spmallette's request.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/9949487f
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/9949487f
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/9949487f
Branch: refs/heads/TINKERPOP-1330
Commit: 9949487f3bbaf26e7ea6cd648c346b5c4977a47e
Parents: be64b52
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Sep 15 05:35:13 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Sep 15 05:35:13 2016 -0600
----------------------------------------------------------------------
.../recipes/traversal-induced-values.asciidoc | 32 +++++---------------
1 file changed, 8 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9949487f/docs/src/recipes/traversal-induced-values.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/recipes/traversal-induced-values.asciidoc b/docs/src/recipes/traversal-induced-values.asciidoc
index 6adefc7..74402b6 100644
--- a/docs/src/recipes/traversal-induced-values.asciidoc
+++ b/docs/src/recipes/traversal-induced-values.asciidoc
@@ -40,37 +40,21 @@ g.V(marko).out('knows').has('age', gt(marko.value('age'))).values('name')
The downside to this approach is that it takes two separate traversals to answer the question. Ideally, there should
be a single traversal, that can query "marko" once, determine his `age` and then use that for the value supplied to
-filter the people he knows. In this way the _value_ for the `age` filter is _induced_ from the `Traversal` itself.
+filter the people he knows. In this way the _value_ for the `age` in the `has()`-filter is _induced_ from the `Traversal`
+itself.
[gremlin-groovy,modern]
----
-g.V().has('name','marko').as('marko'). <1>
- out('knows').as('friend'). <2>
- filter(select('marko','friend').by('age'). <3>
- where('friend', gt('marko'))). <4>
+g.V().has('name','marko').as('marko'). <1>
+ out('knows').as('friend'). <2>
+ where('friend', gt('marko')).by('age'). <3>
values('name')
----
<1> Find the "marko" `Vertex` and label it as "marko".
-<2> Traverse out on the "knows" edges to the adjacent `Vertex` and label it as "person".
-<3> Filter the incoming "person" vertices. It is within this filter, that the traversal induced values are utilized.
-The inner `select` grabs the "marko" vertex and the current "friend". The `by` modulator extracts the "age" from both
-of those vertices which yields a `Map` with two keys, "marko" and "friend", where the value of each is the "age".
-<4> The `Map` produced in the previous step can then be filtered with `where` to only return a result if the "friend"
-age is greater than the "marko" age. If this is successful, then the `filter` step from the previous line will succeed
-and allow the "friend" vertex to pass through.
-
-This traversal could also be written declaratively with `match` step as follows:
-
-[gremlin-groovy,modern]
-----
-g.V().has('name','marko').match(
- __.as('marko').values('age').as('a'),
- __.as('marko').out('knows').as('friend'),
- __.as('friend').values('age').as('b')
- ).where('b', gt('a')).select('friend').
- values('name')
-----
+<2> Traverse out on the "knows" edges to the adjacent `Vertex` and label it as "friend".
+<3> Continue to traverser only if Marko's current friend is older than him.
+<4> Get the name of Marko's older friend.
Traversal induced values are not just for filtering. They can also be used when writing the values of the properties
of one `Vertex` to another: