如果关系不存在,新社会就会联系起来

时间:2016-03-23 15:13:09

标签: go neo4j neoism

到目前为止,我才开始使用新主义并享受它。我遇到了一些问题,并想知道这是我对新自由主义或新自主主义的天真,这是错误的。

我的代码中有一行:

agent.Relate(relation, node.Id() , neoism.Props{})

问题是如果我多次运行它会重复关系。有没有办法只在关系不存在时创建 - 类似于GetOrCreateNodeFunction。

或者在运行上述语句之前,我是否必须编写一些原始cql来检查关系是否已经存在?

提前致谢

2 个答案:

答案 0 :(得分:1)

没有用于创建唯一定向关系的本机函数或REST端点。您可以为每个关系分配唯一的属性值,并在关系属性上添加唯一索引,也可以使用cypher查询和CREATE UNIQUE子句。

can check this repo for awesome android tools

答案 1 :(得分:1)

您可以使用我用于我的代码的以下功能。它具有外部依赖性

  

<强> github.com/imdario/mergo

以下通用函数适用于任何类型的节点和关系。

 func GetOrCreateRelationship(from *neoism.Node, to *neoism.Node, relType string, props neoism.Props) (relationship *neoism.Relationship) {
relationships, err := from.Relationships(relType)

if err == nil {
    for _, relationship := range relationships {
        endNode, err := relationship.End()

        if err != nil {
            continue
        }

        if endNode.Id() == to.Id() {
            newProps, err := relationship.Properties()

            if err != nil {
                return relationship
            }

            if err := mergo.Merge(&newProps, props); err != nil {
                relationship.SetProperties(newProps)
            }

            return relationship
        }
    }
}

relationship, err = from.Relate(relType, to.Id(), props)

if err != nil {
    log.Printf("Cannot create relationship: %s", err)
}

return
}