Gremlin JavaScript中如何为顶点设置长整型(Long)属性?
问题
使用JavaScript/TypeScript代码操作Gremlin图数据库时,需要为顶点设置长整型(Long)属性值,需明确正确实现方式。
问题原因
JavaScript中的number类型在Java、C#等后端生态中默认会按double双精度浮点类型解析,直接传入普通数值无法正确映射为数据库的长整型类型,错误示例代码如下:
public static async experiment(): Promise<any> { const g = GremlinDb.g; await g.addV("test") .property("number", 3).iterate(); return {}; }
正确实现方式
Gremlin官方JavaScript/TypeScript客户端内置了Long类型的序列化适配能力,直接使用包内导出的Long工具类构造长整型值传入即可:
- 首先从gremlin依赖包中导入Long工具:
import { Long } from 'gremlin';
- 写入属性时,将原生数值转换为Long实例后传入属性方法,修正后的代码如下:
public static async experiment(): Promise<any> { const g = GremlinDb.g; await g.addV("test") // 用Long.fromNumber将普通数值转为Gremlin可识别的长整型对象 .property("number", Long.fromNumber(3)).iterate(); return {}; }
注意事项
- 若需要存储的长整型值超过JavaScript安全整数范围(即大于
2^53 - 1),不要使用Long.fromNumber转换,需通过Long.fromString传入数字字符串构造Long实例,避免原生number带来的精度丢失:// 处理超大长整型值示例 const bigLongVal = Long.fromString("9007199254740993") - 必须使用gremlin客户端官方导出的Long类构造值,不要自定义普通对象模拟Long结构,否则会出现Gremlin服务端反序列化失败、类型不匹配的问题。
内容的提问来源于stack exchange,提问作者Manabu Tokunaga
相关产品推荐
相关产品推荐

