gpt4 book ai didi

go - 如何在官方 neo4j go 驱动程序中解析结果?

转载 作者:IT王子 更新时间:2023-10-29 02:08:12 25 4
gpt4 key购买 nike

我在解析 neo4j-go-driver official Driver 的结果时遇到问题当 Cypher 查询匹配时。使用 README.md 示例中的 CREATE 查询可以正常工作,但使用 MATCH 不会对结果 Record().GetByIndex(0) 进行索引

result, err = session.Run("match(n) where n.id = 1 return n", map[string]interface{}{})
if err != nil {
panic(err)
}

for result.Next() {
a := result.Record().GetByIndex(1) //error: Index out or range
b := result.Record().GetByIndex(0).(int64) //error: interface {} is *neo4j.nodeValue, not int64
c := result.Record().GetByIndex(0) //prints corect result: &{14329224 [Item] map[id:1 name:Item 1]}
fmt.Println(c)

}

由于 nodeValue 不是导出类型,所以我不知道是否热断言属性或整个接口(interface)返回到 nodeValue 类型。

最佳答案

您在查询中的 return 之后指定的值是从左到右索引的 0。因此,在您的示例中,由于您仅从 MATCH 返回一个值(在本例中定义为 n),因此它将在索引 0 处可用。索引一,如错误消息显示,超出范围。

//in the following example a node has an id of type int64, name of type string, and value of float32

result, _ := session.Run(`
match(n) where n.id = 1 return n.id, n.name, n.value`, nil)
// index 0 ^ idx 1^ . idx 2^

for result.Next() {
a, ok := result.Record().GetByIndex(0).(int64) //n.id
// ok == true
b, ok := result.Record().GetByIndex(0).(string) //n.name
// ok == true
c, ok := result.Record().GetByIndex(0).(float64)//n.value
// ok == true
}

这可能是访问节点属性值的惯用方式的基线——而不是尝试访问整个节点(驱动程序通过将 nodeValue 保留为未导出的结构来隐式地阻止)从节点返回单个属性,如上面的例子。

使用驱动程序时需要考虑的其他几点。 Result 还公开了一个 Get(key string) (interface{}, ok) 方法,用于通过返回值的名称访问结果。这样,如果您需要更改结果的顺序,您的值提取代码将不会在尝试访问错误索引时中断。所以采取以上内容并稍微修改一下:

result, _ := session.Run(`
match(n) where n.id = 1 return n.id as nodeId, n.name as username, n.value as power`, nil)

for result.Next() {
record := result.Record()
nodeID, ok := record.Get("nodeId")
// ok == true and nodeID is an interface that can be asserted to int
username, ok := record.Get("username")
// ok == true and username is an interface that can be asserted to string

}

最后要指出的是 map[string]interface{} 可用于将值作为参数传递给查询。

session.Run("match(n) where n.id = $id return n", 
map[string]interface{}{
"id": 1237892
})

关于go - 如何在官方 neo4j go 驱动程序中解析结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53657759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com