将 neo4j 结果解组为 Golang 中的嵌套结构
Unmarshalling neo4j results to a nested struct in Golang
我正在使用 neoism 库 (https://github.com/jmcvetta/neois) 与本地 neo4j 数据库对话 - 我是新手,也是 neo4j 的新手,所以我的理解差距可能在任何一方的问题。
我有一个简单的数据库,一个 "page" 节点与一个 "template" 节点相关。我希望能够让结构代表每个节点并将它们嵌套在另一个节点中,但我正在努力让它工作。
正在创建简单的数据库:
template, err := ioutil.ReadFile(viewPath + "templates/default.mustache")
if err != nil{
panic(err)
}
defaultTemplate, _ := db.CreateNode(neoism.Props{
"name": "default",
"content": string(template),
})
defaultTemplate.AddLabel("Template")
n0, _ := db.CreateNode(neoism.Props{
"name": "Home",
"slug": "home",
"title": "Home Page",
"content" : "here I am",
})
n0.AddLabel("Page")
n0.Relate("TEMPLATE", template.Id(), neoism.Props{})
现在开始尝试恢复数据...
这是我的查询,效果很好:
type PageStruct struct{
Name string `json:"p.name"`
Slug string `json:"p.slug"`
Title string `json:"p.title"`
Content string `json:"p.content"`
TemplateName string `json:"t.name"`
TemplateContent string `json:"t.content"`
}
res := []PageStruct{}
cq := neoism.CypherQuery{
Statement: `
MATCH (p:Page)-[r:TEMPLATE]->(t:Template)
WHERE p.slug = {slug}
RETURN p.name, p.slug, p.title, p.content, t.name, t.content
`,
Parameters: neoism.Props{"slug": pageSlug},
Result: &res,
}
db.Cypher(&cq)
page := res[0]
但理想情况下,我想要的是解组为嵌套结构,如下所示:
type PageStruct struct{
Name string `json:"p.name"`
Slug string `json:"p.slug"`
Title string `json:"p.title"`
Content string `json:"p.content"`
Template struct {
Name string `json:"t.name"`
Content string `json:"t.content"`
} `json:"t"`
}
我一直在尝试各种方法,但都没有成功,任何人都可以就如何实现计算机工程这一雄心勃勃的壮举给我任何建议...
此外,我不太清楚如何处理 neo4j 中的关系,因为没有强制执行(我知道)关系类型(例如一对一,一对一-对多)那么如何处理这个 - 我们是否总是假设一个数据数组?
非常感谢help/advice。
使用embedding.
type Page struct {
Name string `json:"p.name"`
// ...
Template
}
type Template struct {
Name string `json:"t.name"`
// ...
}
我正在使用 neoism 库 (https://github.com/jmcvetta/neois) 与本地 neo4j 数据库对话 - 我是新手,也是 neo4j 的新手,所以我的理解差距可能在任何一方的问题。
我有一个简单的数据库,一个 "page" 节点与一个 "template" 节点相关。我希望能够让结构代表每个节点并将它们嵌套在另一个节点中,但我正在努力让它工作。
正在创建简单的数据库:
template, err := ioutil.ReadFile(viewPath + "templates/default.mustache")
if err != nil{
panic(err)
}
defaultTemplate, _ := db.CreateNode(neoism.Props{
"name": "default",
"content": string(template),
})
defaultTemplate.AddLabel("Template")
n0, _ := db.CreateNode(neoism.Props{
"name": "Home",
"slug": "home",
"title": "Home Page",
"content" : "here I am",
})
n0.AddLabel("Page")
n0.Relate("TEMPLATE", template.Id(), neoism.Props{})
现在开始尝试恢复数据...
这是我的查询,效果很好:
type PageStruct struct{
Name string `json:"p.name"`
Slug string `json:"p.slug"`
Title string `json:"p.title"`
Content string `json:"p.content"`
TemplateName string `json:"t.name"`
TemplateContent string `json:"t.content"`
}
res := []PageStruct{}
cq := neoism.CypherQuery{
Statement: `
MATCH (p:Page)-[r:TEMPLATE]->(t:Template)
WHERE p.slug = {slug}
RETURN p.name, p.slug, p.title, p.content, t.name, t.content
`,
Parameters: neoism.Props{"slug": pageSlug},
Result: &res,
}
db.Cypher(&cq)
page := res[0]
但理想情况下,我想要的是解组为嵌套结构,如下所示:
type PageStruct struct{
Name string `json:"p.name"`
Slug string `json:"p.slug"`
Title string `json:"p.title"`
Content string `json:"p.content"`
Template struct {
Name string `json:"t.name"`
Content string `json:"t.content"`
} `json:"t"`
}
我一直在尝试各种方法,但都没有成功,任何人都可以就如何实现计算机工程这一雄心勃勃的壮举给我任何建议...
此外,我不太清楚如何处理 neo4j 中的关系,因为没有强制执行(我知道)关系类型(例如一对一,一对一-对多)那么如何处理这个 - 我们是否总是假设一个数据数组?
非常感谢help/advice。
使用embedding.
type Page struct {
Name string `json:"p.name"`
// ...
Template
}
type Template struct {
Name string `json:"t.name"`
// ...
}