Hi
I have always been uneasy with the asymmetry of the property methods in TP3,
vertex.property('name', "stephen") //Sets the property to a string
vertex.property('name') //Returns an object of type VertexProperty :-(
How about this? It should feel more natural to Java devs as "add" is the
method we expect on collections.
vertex.property('name').add('stephen') //Add (list/set)
vertex.property('name').set('stephen') //Set a single value
It is then up to the graph schema (if supported) to deal with the add
method and if it is a list or set.
Or alternatively:
vertex.property('name').add('stephen') // add a new name property to
vertex -- ignoring whether a name property already exists.
vertex.property('name').put('stephen') // if the name 'stephen' already
exists, do not add a new property
vertex.property('name').set('stephen') // if a property of name already
exists, delete it and add stephen.
Bryn
On 20/03/15 17:14, Matt Frantz wrote:
My preference: Cardinality.single
Since property values can be arbitrary types (subject to vendor
restrictions), I consider the alternate cardinalities to be sugar,
albeit admittedly convenient shorthand when updating existing
collection-valued properties.
Slight tangent: It would be nice to see some type extensibility here.
For example, if you want a property to have a histogram, then you
could register a histogram type with an appropriate Java interface, or
with a lambda that describes what happens when a value is added,
analogous to the withSack API. Graph vendors could add value by
providing a set of property types that have good performance
characteristics.
On Friday, March 20, 2015 at 9:13:13 AM UTC-7, Marko A. Rodriguez wrote:
Hello,
In TinkerPop3, vertices can have multi-properties of the same key.
These are called "vertex properties."
http://tinkerpop.incubator.apache.org/docs/3.0.0-SNAPSHOT/#vertex-properties
<http://tinkerpop.incubator.apache.org/docs/3.0.0-SNAPSHOT/#vertex-properties>
When you create a VertexProperty, you can provide a cardinality.
For instance:
vertex.property(single,'name','stephen') // if a property of name
already exists, delete it and add stephen.
vertex.property(list,'name','stephen') // add a new name property
to vertex -- ignoring whether a name property already exists.
vertex.property(set,'name','stephen') // if the name 'stephen'
already exists, do not add a new property
The question is -- what is:
vertex.property('name','stephen')
In other words, the default behavior. Right now, its
Cardinality.list. However, many people have stated that they would
like it to be Cardinality.single and thus, more aligned with
TinkerPop2 and most graph database vendors.
This is something we will want to have down by TP3 GA -- so please
voice your thoughts.
Thank you,
Marko.
http://markorodriguez.com