You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gremlin JavaScript的mergeV中正确使用Cardinality?

报错原因及mergeV中基数的正确用法

报错原因

你遇到的Unsupported property value type错误,核心原因是CardinalityValue.single()返回的是一个Gremlin遍历对象(DefaultGraphTraversal),但mergeV的option()方法在接收Map类型参数时,要求Map的值必须是直接的属性值,而非遍历步骤。直接把CardinalityValue包装后的值放进Map,相当于给属性赋值了一个遍历对象,不符合图数据库对属性值的要求,因此触发类型不支持错误。

正确用法

在mergeV的option中指定基数,不能用Map包装CardinalityValue,而是要通过**匿名遍历器(__)**构建包含property()步骤的遍历逻辑,把基数指定在property()方法里,和你在addV中的用法逻辑对齐。

示例代码

await g
    .mergeV(new Map([
        [t.label, 'test'],
        [t.id, 'testid']
    ]))
    // onCreate时直接设置属性(无特殊基数需求,默认即为single)
    .option(onCreate, __.property('prop1', 'prop1value3').property('prop2', 'prop2value'))
    // onMatch时明确指定single基数设置属性
    .option(onMatch, __.property(single, 'prop1', 'prop1value3').property(single, 'prop2', 'prop2value3'))
    .iterate();

说明

  • __是Gremlin的匿名遍历器,用来构建独立的遍历步骤,作为option的参数传入,告诉图数据库在匹配/创建节点时执行对应的属性操作。
  • 在onMatch中,通过property(single, key, value)明确指定基数,和你在addV中使用的方式完全一致,能正确触发基数约束逻辑。
  • CardinalityValue一般用于with()等特殊场景,不适合直接作为mergeV的option Map值传入。

内容的提问来源于stack exchange,提问作者kyl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 17:27:26