如果关系不存在,则新主义相关

Neoism relate if relationship doesn't exist

到目前为止,我才刚刚开始使用新主义并享受它。我遇到了一点问题,想知道是我的新主义天真还是新主义本身有问题。

我的代码中有一行:

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

问题是,如果我 运行 它不止一次,它会复制关系。有没有一种方法可以仅在关系尚不存在时创建 - 类似于 GetOrCreateNodeFunction。

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

提前致谢

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

http://neo4j.com/docs/stable/query-create-unique.html#_create_unique_relationships

您可以使用我在代码中使用的以下函数。它在

有一个外部依赖

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
}