是否有API可通过Go bolt驱动获取Neo4j关系详情?
Neo4j Go Bolt驱动无法获取关系数据排查方案
- 数据库实例不匹配
确认程序连接的数据库名称和Neo4j浏览器使用的库一致。Neo4j浏览器默认使用
neo4j默认库,若程序初始化驱动、创建会话时没有显式指定DatabaseName参数,部分版本驱动会默认连接system系统库,自然无法查询到业务数据。
- 查询语句符号错误
你给出的查询示例中使用了全角左引号‘包裹字符串foo,确认程序内的查询语句是否使用了半角单引号',或直接使用参数化查询避免符号、编码问题:
// 推荐参数化写法,避免符号匹配问题 result, err := tx.Run( `MATCH (:a {name: $name})-[r:bar]->() RETURN properties(r)`, map[string]interface{}{"name": "foo"}, )
- 结果消费逻辑错误
Go驱动的Result是流式迭代对象,必须在事务未关闭/提交前完成结果遍历,不能在事务结束后再消费结果,也不能省略迭代错误检查,正确写法参考:
// 事务生命周期内遍历结果 for result.Next() { record := result.Record() // 两种取值方式二选一即可 // 方式1:按返回值索引取值 props, isOk := record.Values[0].(map[string]interface{}) // 方式2:按返回字段名取值 // propsVal, isExist := record.Get("properties(r)") // props, isOk := propsVal.(map[string]interface{}) if isOk { println("X:", props["X"], "Y:", props["Y"]) } } // 必须检查迭代过程产生的底层错误 if err = result.Err(); err != nil { // 处理查询错误 panic(err) }
- 集群访问模式配置错误
如果你使用的是Neo4j集群部署,创建会话时请显式指定读访问模式neo4j.AccessModeRead,避免请求被路由到未同步数据的节点,导致查询返回空结果。
内容的提问来源于stack exchange,提问作者NeoBond
相关产品推荐
相关产品推荐

