[
https://issues.apache.org/jira/browse/TINKERPOP-479?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15181838#comment-15181838
]
Daniel Kuppitz commented on TINKERPOP-479:
------------------------------------------
{quote}so orCreate would assume that 'name', 'jon' was unique and use that to
create the vertex.{quote}
It doesn't have to be unique. If at least one vertex matches the criteria, then
it's a get, otherwise we create a vertex that fulfills all (there could be more
{{has()}}'s) criteria. So you could either do this:
{code}
g.V().has("person","name","jon").has("age",42).orCreate()
{code}
or a slightly modified version of your suggestion:
{code}
g.V().has("person","name","jon").orCreate(property(single, "age", 42))
{code}
Such a post-traversal would also you to add edges, which IMO is also a common
pattern (create a vertex and connect it with others).
HOWEVER, here's the thing: People could do this:
{code}
g.V().has("person","name","jon").has("age", gt(42)).orCreate()
{code}
Now what? Maybe the answer is obvious and we would simply throw an exception
({{orCreate()}} only supports equality filters ...).
> Consider Providing "getOrCreate" Functionality
> ----------------------------------------------
>
> Key: TINKERPOP-479
> URL: https://issues.apache.org/jira/browse/TINKERPOP-479
> Project: TinkerPop
> Issue Type: Improvement
> Components: structure
> Affects Versions: 3.0.2-incubating
> Reporter: stephen mallette
>
> One of the most commonly written functions used is good ol' "getOrCreate"
> where you want to get a {{Vertex}} if it exists or create it with supplied
> properties if it does not. We currently have a "helper" function for this on
> {{ElementHelper}}
> https://github.com/tinkerpop/tinkerpop3/blob/6d0f00865f673cb0739f6f310e1868425f732924/gremlin-core/src/main/java/com/tinkerpop/gremlin/structure/util/ElementHelper.java#L62
> but perhaps it is time to treat this issue as a first class citizen as part
> of the Graph API. I think that some vendors might actually be able to
> optimize this function as well.
> Another aspect of "getOrCreate" is "upsert" as well as options to ensure
> uniqueness. All of these things we've at some point or another built
> variations of outside of TinkerPop for applications, data loading, etc.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)