将 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"]
能否请您帮忙采取哪些步骤:
- 如何使用
UNWIND
或 FOREACH
或 apoc.function
遍历 urlArr
?
- 然后循环内的每个值
split( arrValue, "=") as keyValue
- 如何收集这些键值转换成这个Url
(:urlQuery{ collectedKeyVals })
密码:
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
- 使用
List comprehension
获取键值对列表
- 然后使用
apoc.map.fromPairs
函数从具有键值对的列表中获取映射
- 并使用
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
我正在尝试将 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"]
能否请您帮忙采取哪些步骤:
- 如何使用
UNWIND
或FOREACH
或apoc.function
遍历urlArr
? - 然后循环内的每个值
split( arrValue, "=") as keyValue
- 如何收集这些键值转换成这个Url
(:urlQuery{ collectedKeyVals })
密码:
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
- 使用
List comprehension
获取键值对列表 - 然后使用
apoc.map.fromPairs
函数从具有键值对的列表中获取映射 - 并使用
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