Создание узла и края в Neo4j на определенных условиях - PullRequest
0 голосов
/ 11 июня 2018

Я сейчас пытаюсь добавить список уникальных локаций в Neo4j (слияние).Если узел Location имеет значение для OwnerId, то я хотел бы создать отношение к соответствующему узлу Owner и добавить новую метку с именем ManagedLocation.

Example

public class Location
{
    public string Name {get;set;}
    public string Built {get;set;}
    public long OwnerId {get;set;}
}

public class Owner
{
    public long Id {get;set;
    public string Name {get;set;}
}

Проблема, с которой я сталкиваюсь, заключается в том, что only добавляет те, где OwnerId имеет значение и игнорирует остальные.Ответ можно либо кодировать с помощью Neo4jClient, либо с помощью необработанного CYPHER, а остальное я могу отработать.Не стесняйтесь задавать любые вопросы для разъяснения

Вот что я имею до сих пор:

 graphClient.Cypher
                    .Unwind(locs, "loc")
                    .Match("(t:Owner{ Id: loc.OwnerId}) RETURN t LIMIT 1")
                    .Merge("(l:Location {Name: loc.Name})")
                    .OnCreate()                        
                    .Set("l = loc")
                    .Create("(t)-[:Manages]->(l)")
                    .Set ("l = ManagedLocation")
                    .ExecuteWithoutResults();

1 Ответ

0 голосов
/ 13 июня 2018

Это все связано с упорядочением вашего кода, в случаях, когда OwnerId не установлен - MATCH не удастся - и поэтому не будет продолжать выполнение запроса.Сначала вы должны указать MERGE для местоположения:

graphClient.Cypher
    .Unwind(locs, "loc")
    .Merge("(l:Location {Name: loc.Name})")
    .OnCreate()
    .Set("l = loc")
    .With("l")
    .Match("(t:Owner { Id: l.OwnerId})")
    .Create("(t)-[:Manages]->(l)")
    .Set("l:ManagedLocation")
    .ExecuteWithoutResults();

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

...