Ваша попытка фактически создает: отношения CO_CREATOR с новыми пустыми узлами, вы можете сначала удалить пустые узлы и их отношения.
Следует иметь в виду, что если вы хотите создать: Projectузлы из ваших исходных данных вместе с теми, кто участвовал в создании проекта, у вас будет возможность запросить через эти узлы, чтобы найти соавторов и силу этих коллабораций.
Итак, если вы объединены в: Projectsа также отношения: CO_CREATOR между: узлами проекта и узлами: авторами, вы можете сделать что-то вроде этого:
MATCH (a:Authors {name:'Dave Chappelle'})-[:CO_CREATOR*2]-(coAuthor)
WITH coAuthor, count(coAuthor) as strength
ORDER BY strength DESC
RETURN coAuthor, strength
А вот запрос импорта, который вы бы использовали для объединения проектов и присоединения их к вашемууже импортировано: узлы авторов:
CALL apoc.load.json('file:/path/to/data.txt') YIELD value AS q
MERGE (p:Project {name:q.title})
WITH q, p
UNWIND q.authors as author
MATCH (a:Authors {name:author.name})
MERGE (a)-[:CO_CREATOR]->(p)
EDIT
Если вы хотите использовать эту существующую структуру для создания: CO_AUTHOR отношений между авторами, вы можете сделать что-то вроде этого:
MATCH (p:Project)
WHERE size((p)<-[:CO_CREATOR]-()) > 1
WITH [(p)<-[:CO_CREATOR]-(a) | a] as coAuthors
UNWIND apoc.coll.combinations(coAuthors, 2) as pair
WITH pair[0] as first, pair[1] as second
MERGE (first)-[:CO_AUTHOR]-(second)
Предполагается, что у вас установлены процедуры APOC.Если вы этого не сделаете, вот альтернативный способ получить все комбинации из 2, чтобы вы могли создать отношения между ними:
MATCH (p:Project)
WHERE size((p)<-[:CO_CREATOR]-()) > 1
WITH [(p)<-[:CO_CREATOR]-(a) | a] as coAuthors
UNWIND coAuthors as first
UNWIND coAuthors as second
WITH first, second
WHERE id(first) < id(second)
MERGE (first)-[:CO_AUTHOR]-(second)