Неоизм связан, если отношения не существуют

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

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

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

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

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

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

2 ответа

Решение

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

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

Вы можете использовать следующую функцию, которую я использую для моего кода. Он имеет внешнюю зависимость в

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
}
Другие вопросы по тегам