2016-03-23 2 views
0

Я только начал использовать неоосность и наслаждаться ею до сих пор. Я ударил немного о проблеме и задался вопросом, не ошибается ли моя наивность неоязыка или неоазизма.Neoism соотносится, если отношений не существует

У меня есть строка в моем ходе код:

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

Вопрос заключается в том, что если я запускаю его больше, чем когда-то он будет дублировать отношения. Есть ли способ создать, только если отношения еще не существуют, что-то похожее на GetOrCreateNodeFunction.

Или мне нужно написать некоторый необработанный cql, чтобы проверить, существует ли связь уже существует, прежде чем запускать инструкцию выше?

Заранее спасибо

ответ

1

Там не является родной функцией или REST конечной точки для создания уникальных направленных отношений. Вы можете назначить уникальное значение свойства для каждой связи и добавить уникальный индекс в свойстве отношений, или вы можете использовать запрос cypher и предложение CREATE UNIQUE.

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

+0

Благодарим за отзыв. Я закончил делать именно это - создаю оператор cypher и запускаю его через neoism.query. – Airomega

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 
}