将 Url 查询转换为节点

Convert an Url-query into a node

我正在尝试将 Url-String 转换为带有密码的节点:

`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"]

能否请您帮忙采取哪些步骤:

密码:

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
  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

您可以在创建节点后使用 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