为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
HUH函数 2021-12-27 15:45:30
到目前为止,我才刚刚开始使用新主义并享受它。我遇到了一些问题,想知道是我对新主义的幼稚还是新主义本身有问题。我的 go 代码中有一行:agent.Relate(relation, node.Id() , neoism.Props{})问题是,如果我多次运行它,它将复制这种关系。有没有办法仅在关系不存在的情况下创建 - 类似于 GetOrCreateNodeFunction 的东西。或者在运行上面的语句之前我是否必须编写一些原始 cql 来检查关系是否已经存在?提前致谢
查看完整描述

2 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

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

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


查看完整回答
反对 回复 2021-12-27
?
www说

TA贡献1775条经验 获得超8个赞

您可以使用我用于代码的以下函数。它有一个外部依赖


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

}


查看完整回答
反对 回复 2021-12-27
  • 2 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信