Neptune、Python、Gremlin:使用值数组更新图顶点中的 属性

Neptune, Python, Gremlin: Update a property in a graph vertex with an array of values

使用 Amazon Neptune 作为 GraphDB,我正在尝试更新一些顶点的 属性 以包含值列表。 guide:

中的基本 gremlin 示例
// Add a list as a property value
g.V().has('code','AUS').property('places',out().values('code').fold())  

失败:

{
  "requestId": "XXX",
  "detailedMessage": "Unsupported property value type: java.util.ArrayList",
  "code": "UnsupportedOperationException"
}

我也尝试添加 list 修饰符

g.V().has('code','AUS').property(list, 'places',out().values('code').fold())

失败:

{
  "requestId": "XXX",
  "detailedMessage": "list cardinality for vertex property is not supported",
  "code": "UnsupportedOperationException"
}

如果出于某种原因 python-gremlin 或 Amazon Neptune 风格不支持数组或列表作为 属性 值,我可以选择一个将值连接成的值一个字符串。我尝试使用各种选项:

g.V().has('code','AUS').property('places',out().values('code').fold(0) {a,b -> a + b.length()})

g.V().has('code','AUS').property('places',out().values('code')map {join(",",it.get().value('code'))})

但 none 正常。

我认为您必须在单独的 property 步骤中插入每个值

像这样:

g.V().has('code', 'AUS').as('airport').
  out().values('code').as('code').select('airport').
  property(set, 'places', select('code'))

编辑:

我在 AWS user guide 中看到不支持列表基数。因此最接近的解决方案是使用 set 基数。

Neptune supports set cardinality and single cardinality. If it isn't specified, set cardinality is selected. This means that if you set a property value, it adds a new value to the property, but only if it doesn't already appear in the set of values. This is the Gremlin enumeration value of Set. List is not supported. For more information about property cardinality, see the Vertex topic in the Gremlin JavaDoc.

示例:https://gremlify.com/9v