到目前为止,我才开始使用新主义并享受它。我遇到了一些问题,并想知道这是我对新自由主义或新自主主义的天真,这是错误的。
我的代码中有一行:
agent.Relate(relation, node.Id() , neoism.Props{})
问题是如果我多次运行它会重复关系。有没有办法只在关系不存在时创建 - 类似于GetOrCreateNodeFunction。
或者在运行上述语句之前,我是否必须编写一些原始cql来检查关系是否已经存在?
提前致谢
答案 0 :(得分:1)
没有用于创建唯一定向关系的本机函数或REST端点。您可以为每个关系分配唯一的属性值,并在关系属性上添加唯一索引,也可以使用cypher查询和CREATE UNIQUE子句。
答案 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
}