我的目標是訪問並改變密碼查詢中的節點的屬性,其中要訪問和突變的屬性的名稱是未知字符串值。如何通過Cypher中的屬性名稱字符串訪問和更改節點屬性值?
例如,考慮一個命令:
查找含有兩個屬性,使得所述第一屬性的名稱是小寫和後者的名稱的所有節點是大寫表示的前者。 Then,將小寫字符串名稱的屬性值傳遞給大寫名稱的屬性值。
的特定情況下是很容易:
MATCH (node)
WHERE has(node.age) AND has(node.AGE) AND node.age <> node.AGE
SET node.AGE = node.age
RETURN node;
但我似乎無法找到一種方法來實現單個請求的一般情況。
具體來說,我不能:
- 訪問節點的一個字符串和值的屬性
- 變異節點的屬性用於字符串和值
爲了清楚起見,我將包括我處理一般情況的嘗試。如果我未能修改節點的屬性,我可以爲一個命令生成密碼,以便在後續事務中執行該命令時完成我的最終目標。
MERGE (justToMakeSureOneExists { age: 14, AGE : 140 }) WITH justToMakeSureOneExists
MATCH (node)
WHERE ANY (kx IN keys(node) WHERE kx = LOWER(kx) AND ANY (ky in keys(node) WHERE ky = UPPER(kx)))
REMOVE node.name_conflicts // make sure results are current
FOREACH(kx in keys(node) |
SET node.name_conflicts
= COALESCE(node.name_conflicts,[])
+ CASE kx
WHEN lower(kx)
THEN []
+ CASE WHEN any (ky in keys(node) WHERE ky = upper(kx))
THEN ['match (node) where id(node) = ' + id(node)+ ' and node.' + upper(kx) + ' <> node.' + kx + ' set node.' + upper(kx) + ' = node.' + kx + ' return node;']
ELSE [] END
ELSE []
END)
RETURN node,keys(node)
有感:好像變異按屬性名稱的節點屬性將是一個非常常見的需求的能力,但對於功能缺乏明顯的支持,使我相信該功能是故意省略?如果此功能確實不受支持,是否有任何文檔解釋爲什麼以及該方法與Neo/Cypher中推薦的處理方式之間是否存在衝突?
是否可以使用非託管擴展來擴展默認密碼處理? – smartcaveman
否。非託管擴展暴露爲新的REST端點。 –
這就是我的想法......那麼當你說要通過屬性名稱實現變異屬性作爲非託管擴展時,你究竟意味着什麼? (REST api支持開箱即用) – smartcaveman