Конвертировать Url-запрос в узел - PullRequest
1 голос
/ 30 марта 2019

Я пытаюсь преобразовать строку Url в узел с шифром:

`https://e.whoopidoo.nl/x/plugin/?pName=edit_data&MIDRID=S7Y1Mv2fa2tobGz5P8fW0NzU4n8RUMjYwNIAAAA21&Z=-394462905&utm_source=DMdelivery&utm_medium=email&utm_content=ae9982saa&utm_campaign=aletter%202018"`

И преобразовать его в массив с

`split(apoc.data.url(u.url).query,"&") as urlArr`

Массив результатов: ["pName=edit_data", "MIDRID=S7Y1Mv2fa2tobGz5P8fW0NzU4n_RrZGhsZmRJQAA67", "Z=-1006289928", "utm_source=DMdelivery", "utm_medium=email", "utm_content=ae9982saa", "utm_campaign=aletter 2018"]

Не могли бы вы помочь, какие шаги предпринять:

  • Как перебрать urlArr с помощью UNWIND или FOREACH или apoc.function?
  • Затем с каждым значением в цикле split( arrValue, "=") as keyValue
  • Как собрать эти значения ключа, преобразованные в (:urlQuery{ collectedKeyVals }) этого URL

Сайфер:

MATCH (u:Url)
WITH u, split(apoc.data.url(u.url).query,"&") as urlArr 
// UNWIND or FOREACH - urlArr?
// ... in loop ... split( arrValue, "=") as keyValue
// How to COLLECT efficiently ?
// MERGE or CREATE

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Вы можете использовать UNWIND после создания узла, чтобы динамически устанавливать эти свойства с помощью apoc.

WITH split(apoc.data.url("https://e.whoopidoo.nl/x/plugin/?pName=edit_data&MIDRID=S7Y1Mv2fa2tobGz5P8fW0NzU4n8RUMjYwNIAAAA21&Z=-394462905&utm_source=DMdelivery&utm_medium=email&utm_content=ae9982saa&utm_campaign=aletter%202018").query,"&") as urlArr 
CREATE (N:urlQuery) 
WITH N,urlArr
UNWIND urlArr as urlValue 
CALL apoc.create.setProperty(N, split( urlValue, "=")[0], split( urlValue, "=")[1]) YIELD node
RETURN node
0 голосов
/ 30 марта 2019
  1. Используйте List comprehension, чтобы получить список пар ключ-значение
  2. Затем используйте функцию apoc.map.fromPairs, чтобы получить карту из списка с парами ключ-значение
  3. И используйте SET для установки свойств с карты

WITH "https://e.whoopidoo.nl/x/plugin/?pName=edit_data&MIDRID=S7Y1Mv2fa2tobGz5P8fW0NzU4n8RUMjYwNIAAAA21&Z=-394462905&utm_source=DMdelivery&utm_medium=email&utm_content=ae9982saa&utm_campaign=aletter%202018" as url
WITH split(apoc.data.url(url).query,"&") as urlArr

// 1
WITH [n in urlArr | split(n, '=')] as keyValuePairs
// 2
WITH apoc.map.fromPairs(keyValuePairs) as keyValueMaps
// 3 
CREATE (U:urlQuery) SET U = keyValueMaps

RETURN U
...