首页 > 解决方案 > Gremlin 更新现有顶点的元属性

问题描述

我正在创建一个具有其属性的顶点。每个属性都有其元属性

// Define schema in Gemlin Console

// Create vertex
mgmt.makeVertexLabel('v01').make()

// Create properties
mgmt.makePropertyKey('p01').dataType(String.class).cardinality(LIST).make()

// Create meta-properties
mgmt.makePropertyKey('created_by').dataType(String.class).cardinality(SINGLE).make()
mgmt.makePropertyKey('created_date').dataType(String.class).cardinality(SINGLE).make()
mgmt.makePropertyKey('modified_by').dataType(String.class).cardinality(SINGLE).make()
mgmt.makePropertyKey('modified_date').dataType(String.class).cardinality(SINGLE).make()

// Insert data
p.addV('v01').
    property(list, 'p01', 'pvalue01', 'created_by', 'system01' ,'created_date', new Date(), 'modified_by', '', 'modified_date')

元属性信息:

created_by: 创建属性值的系统名称

created_date: 创建值的时间戳

modified_by: 更新属性值的系统名称

modified_date: 更新值的时间戳

将属性值pvalue01添加到 propertyp01时,只有created_bycreated_date有值,而modified_bymodified_date有空字符串。

如果将更新的值pvalue02添加到属性p01,我应该如何更新元属性(modified_bymodified_datepvalue01

标签: groovygremlinjanusgraph

解决方案


要更改元属性的值,您只需找到它并使用一个property步骤来更改它的值。例如

g.V().hasLabel('v01').
    properties('p01').
    property('modified_date',new Date())

如果您需要更新多个属性,则从该property步骤返回的值是顶点属性,因此您可以将它们链接在一起。

g.V().hasLabel('v01').
    properties('p01').
    property('modified_date',new Date()).
    property('modified_by','Me')

list更新添加了一个在使用基数时如何工作的示例:

gremlin> g.addV('V01').
           property(list,'mylist','pv1').
           property(list,'mylist','pv2')
==>v[60870]

gremlin> g.V().hasLabel('V01').propertyMap()
==>[mylist:[vp[mylist->pv1],vp[mylist->pv2]]]

gremlin> g.V().hasLabel('V01').properties('mylist')
==>vp[mylist->pv1]
==>vp[mylist->pv2]

gremlin> g.V().hasLabel('V01').properties('mylist').hasValue('pv2')
==>vp[mylist->pv2]

gremlin> g.V().hasLabel('V01').properties('mylist').hasValue('pv2').property('meta',123)
==>vp[mylist->pv2]

gremlin> g.V().hasLabel('V01').properties('mylist').hasValue('pv2').properties()
==>p[meta->123]         

推荐阅读