我正在尝试设置基数。例如,它可以与addV一起使用
await g.V(id1).property(single, 'timestamp', 10).next();
但是,当我尝试使用mergeV时,它不起作用
const properties = new Map([
['prop1', CardinalityValue.single('prop1value3')],
['prop2', CardinalityValue.single('prop2value3')]
]);
const propertiesNoCard = new Map([
['prop1', 'prop1value3'],
['prop2', 'prop2value']
]);
await g
.mergeV(
new Map([
[t.label, 'test'],
[t.id, 'testid']
])
)
.option(onCreate, propertiesNoCard)
.option(onMatch, properties)
.iterate();
ResponseError: Server error: {"code":"UnsupportedOperationException","requestId":"408e6686-68dc-4700-b2c5-9d816d2a7bdb","detailedMessage":"Unsupported property value type: org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal","message":"Unsupported property value type: org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal"} (499)
我之所以这样做是因为在gremlin源代码的gremlin-javascript/test/cucumber/gremlin.js
中,有一些例子他们调用CardinalityValue.xxx
,https://github.com/apache/tinkerpop/blob/master/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
function({g}) { return g.mergeV(new Map([["name","marko"]])).option(Merge.onMatch,new Map([["age",CardinalityValue.single(33)]])) }
如果我这样声明它,从Gremlin MergeV To Update an Existing Element's property and Single Cardinality得到,它就可以工作。
const properties = new Map([
['prop1', CardinalityValue.single('prop1value3')],
['prop2', CardinalityValue.single('prop2value3')]
]);
const propertiesNoCard = new Map([
['prop1', 'prop1value3'],
['prop2', 'prop2value']
]);
await g
.mergeV(
new Map([
[t.label, 'test'],
[t.id, 'testid']
])
)
.option(onCreate, propertiesNoCard)
.option(
onMatch,
__.sideEffect(__.property(single, 'prop1', 'prop1val23').property(single, 'prop2', 'prop2val23')).constant(
new Map()
)
)
.iterate();
1条答案
按热度按时间rseugnpd1#
从标签上看,您可能正在使用Amazon Neptune。在Apache TInkerPop 3.7.0版本中,添加了对基数的支持。Amazon Neptune目前支持TinkerPop 3.6.2版本。在Amazon Neptune升级到3.7.x TinkerPop版本之前,您可以使用以下示例模式作为解决方法。这是在1.2.1.0.R6引擎版本上使用Amazon Neptune进行测试的。这个例子是按照基本的Gremlin编写的,但是你应该能够在你的JavaScript代码中采用它。
第一次创造了
然后,如果我们第二次运行上面的合并并检查顶点,则更新已经以单个基数的方式应用。