APOC是Neo4j 3.3版本推出時正式推薦的一個Java用戶擴展過程包,里面包含豐富的函數和過程,作為對Cypher所不能提供的復雜圖算法和數據操作功能的補充,APOC還具有使用靈活、高性能等優勢。
APOC的安裝:
- 在 https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases 下載對應的apoc jar 包放到Neo4j的plugin目錄下;
- 修改配置文件,conf目錄下的neo4j.conf,添加:
dbms.security.procedures.unrestricted=apoc.*
啟動neo4j,運行如下cypher,判斷類型
return apoc.meta.type('hello')
返回STRING
,注意返回值都是大寫。
return apoc.meta.type(["hello", "world"])
返回LIST
create(n:Fruit{name:'apple', color:['red', 'green']})
match(n:Fruit) return apoc.meta.type(n.color)
返回STRING[]
return apoc.meta.type(1)
返回INTEGER
Tip:
如果出現上面的錯誤,是因為安裝的時候沒有修改配置文件
應用:
對Neo4j中的數據進行修改,將字符串數組壓平為字符串,但是該屬性中既有字符串,又有字符串數組,需要判斷該屬性是哪種數據類型,進行相應的操作。Cypher自帶的size
函數,對于字符串返回的是字符串的長度,對于集合類型返回的是其中的元素個數。例如:
在前邊create(n:Fruit{name:'apple', color:['red', 'green']})
的基礎上create(:Fruit{name:'banana', color:'yellow'})
查詢match(n:Fruit) return n.name, size(n.color)
可以看到,蘋果的顏色是一個字符串數組,長度是2,香蕉的顏色是一個字符串,長度是6,并不能通過
size
函數有效的區分。
使用apoc中的函數:apoc.meta.type()
查詢match(n:Fruit) return n.name, apoc.meta.type(n.color)
查找所有color屬性為字符串數組類型的節點:
match(n:Fruit) where apoc.meta.type(n.color) = 'STRING[]' return n.name, n.color
此外apoc.meta.typeName()
函數和apoc.meta.type()
相同
壓平:
對數據類型為字符串數組的屬性值進行壓平,中間用逗號隔開,逗號后邊跟一個空格,末尾不帶有括號。
create(n:Fruit{name:'grape', color:['purple', 'green', 'white']})
match(n:Fruit) where apoc.meta.type(n.color) = 'STRING[]' return substring(reduce(s='', x IN n.color | s + ', ' + x), 2)
這里使用到了Cypher自帶的reduce
函數。
若將color屬性為字符串數組的,設置為字符串數組中的第一個元素:
match(n:Fruit) where apoc.meta.type(n.color) = 'STRING[]' set n.color = n.color[0]
連接:
APOC 用戶手冊 3.4.0.1 鏈接中包含可以查詢APOC的過程和函數,如下
查詢APOC的過程和函數
參考:
http://neo4j.com.cn/topic/5ae72f3951bad0a10b198cca
https://blog.csdn.net/HaiYang_Gao/article/details/81320889
http://neo4j.com.cn/topic/5b5996abd40e09d75e4d235f