У меня есть небольшой график, в нем есть «родительские» узлы (как в узлах, которые определяют родителя дочернего элемента) и «дочерние» узлы (дочерние элементы указанных родителей). Я заметил небольшую проблему в том, как я создаю братьев и сестер существующих детей, и надеялся на некоторые указатели.
return client.Cypher
.Match("(person:Person),(c:IdCounter)")
.Where((Person person) => person.Email == '[email protected]')
.Create("person-[:PARENT_OF]->(child:Child {name:'fred',dob:timestamp()})")
.Set("child.timestamp = timestamp()")
.Set("child.id = c.nextId")
.Set("c.nextId = c.nextId + 1")
.Return<Child>("child").Results.ToList();
Это создает дочерний элемент, у которого есть родитель, и создает отношения, это отлично работает, как и было задумано. Однако в следующем бите у меня есть проблема:
return client.Cypher
.Match("(child:Child)<-[:PARENT_OF]-(person:Person),(c:IdCounter)")
.Where((Person person) => person.Email == '[email protected]')
.Create("(child2:Child {name:'derf',dob:timestamp()})")
.Set("child2.id = c.nextId")
.Set("c.nextId = c.nextId + 1")
.Create("(person)-[:PARENT_OF]->(child2)")
.Create("(child2)-[:SIBLING_OF]->(child)")
.Return<Child>("child2").Results.ToList();
Теперь, когда я впервые запускаю этот одноуровневый код, я получаю второго дочернего элемента, связанного с родителем и связанного с его родным братом, поэтому в большинстве случаев это было бы хорошо, но у меня есть 4 дочерних элемента:/
Во второй раз, когда я запускаю родственный код, я получаю 2 дочерних элемента (один и тот же дочерний элемент дважды с последовательными идентификаторами), и они связаны с родителем (PARENT_OF), но 1 новый дочерний элемент ссылается на 1 существующий дочерний элемент (SIBLING_OF), а второй новый дочерние ссылки на другого существующего дочернего элемента (SIBLING_OF). РЕДАКТИРОВАТЬ: это используемый Cypher и результирующий график после двукратного запуска родственного кода: http://ec2-52-89-85-67.us-west-2.compute.amazonaws.com/imagedata/capture.png
ожидал бы, что будет создан 1 новый дочерний элемент, и отношение SIBLING_OF будет создано для дочерних элементов, собранных в исходном выражении соответствия, но это не то, что я получаю.
Спасибо