unmarshalling neo4j导致Golang中的嵌套结构

时间:2015-07-10 11:45:27

标签: json go neo4j unmarshalling

我正在使用新主义库(https://github.com/jmcvetta/neois)与当地的neo4j数据库交谈 - 我是新手,并且是neo4j的新手,所以我理解的差距可以在问题的任何一方。

我有一个简单的数据库,一个单一的"页面"与单个"模板相关的节点"节点。我希望能够拥有代表每个节点的结构并将它们嵌套在另一个节点中,但是我一直在努力让它发挥作用。

创建简单的数据库:

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中的关系,因为没有强制执行(我知道)关系的类型(例如,一对一,一对多)所以如何处理这个问题 - 我们总是只假设一个数据数组吗?

非常感谢任何帮助/建议。

1 个答案:

答案 0 :(得分:1)

使用embedding

type Page struct {
    Name string `json:"p.name"`
    // ...
    Template
}

type Template struct {
    Name string `json:"t.name"`
    // ...
}

游乐场:http://play.golang.org/p/B3ro3wgsGS