Некоторые вещи, которые следует иметь в виду:
Операции шифрования выполняются для каждой строки.
Старайтесь не думать о UNWIND как о циклесостав.Все это делает декартово произведение переменных в строке с элементами списка.
Таким образом, когда вы УВЕЛИЧИТЕ список, у вас будет строка для каждого элемента списка, а также все переменные, которые уже присутствовали в строке.Затем, когда происходит следующая операция (например, MATCH или WITH), которая выполняется для каждой строки, это выглядит как циклическая структура, но на самом деле это не так.
В любом случае UNWIND не требуетсяВот.Для шаблона с двумя узлами tail(nodes(p))
будет просто одноэлементным списком, содержащим только последний узел.Он не изменил количество строк (поскольку размер списка равен 1) и не поможет вам в этом.
Этот запрос должен работать лучше:
MATCH (h:HashTag)
WITH h LIMIT 3 // best to limit early to avoid doing unnecessary work
WITH h, h.tag as hashtagName, size((h)-[:TAG]->()) as hashtagCount, [(h)-[:TAG]->(r:RateableEntity) | r.id] as hashtagItems
WITH h {hashtagName, hashtagCount, hashtagItems} as entry
RETURN collect(entry) as hashtagList
РЕДАКТИРОВАТЬ
Если вы хотите получить 3 верхних хэштега по размеру, вы можете использовать модифицированный запрос ниже:
MATCH (h:HashTag)
WITH h, size((h)-[:TAG]->()) as hashtagCount
ORDER BY hashtagCount DESC
LIMIT 3
WITH h, hashtagCount, h.tag as hashtagName, [(h)-[:TAG]->(r:RateableEntity) | r.id] as hashtagItems
WITH h {hashtagName, hashtagCount, hashtagItems} as entry
RETURN collect(entry) as hashtagList