Ваши данные находятся в файле CSV, а еще нет в базе данных neo4j. Поэтому, чтобы избежать хранения нежелательных узлов и связей в базе данных, вам нужно написать запрос, который считывает все данные CSV в память, отфильтровывается ненужные данные в памяти, и, наконец, сохранили нужные данные в БД. Это определенно возможно сделать, но, возможно, в этом нет необходимости, и это может привести к нехватке памяти, если файл CSV слишком велик.
Я предлагаю вам сделать то, что вы хотите, в 2 этапа. Во-первых, просто создайте все узлы и отношения из CSV-файла, не отсеивая ничего (и опуская ваше предложение OPTIONAl MATCH
, которое ничего не делает, кроме потери времени).
Во-вторых, удалите ненужные узлы и отношения:
MATCH (f:Friend)
WHERE SIZE((f)-[:friend_to]->(:FriendOfAFriend)) > 1
FOREACH(p IN (f)-[:friend_to]->(:FriendOfAFriend) | DELETE RELATIONSHIPS(p)[0])
DETACH DELETE f;
Предложение WHERE
- это быстрая проверка степени для эффективного поиска узлов Friend
с более чем 1 исходящим отношением friend_to
. Предложение FOREACH
удалит нежелательные отношения friend_to
, а предложение DETACH DELETE
удалит нежелательные узлы Friend
(и любые оставшиеся отношения, которые они могут иметь).
[Кстати, ваша модель данных (с Friend
и FriendOfAFriend
) кажется неправильной, но это другая проблема.]