Neo4j怎么判断节点的属性的类型

APOC是Neo4j 3.3版本推出时正式推荐的一个Java用户扩展过程包,里面包含丰富的函数和过程,作为对Cypher所不能提供的复杂图算法和数据操作功能的补充,APOC还具有使用灵活、高性能等优势。

APOC的安装:

  1. 在 https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases 下载对应的apoc jar 包放到Neo4j的plugin目录下;
  2. 修改配置文件,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怎么判断节点的属性的类型_第1张图片
Neo.ClientError.Procedure.ProcedureRegistrationFailed

如果出现上面的错误,是因为安装的时候没有修改配置文件


应用:

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

Neo4j怎么判断节点的属性的类型_第2张图片

可以看到,苹果的颜色是一个字符串数组,长度是2,香蕉的颜色是一个字符串,长度是6,并不能通过 size函数有效的区分。

使用apoc中的函数:apoc.meta.type()
查询match(n:Fruit) return n.name, apoc.meta.type(n.color)

Neo4j怎么判断节点的属性的类型_第3张图片

查找所有color属性为字符串数组类型的节点:
match(n:Fruit) where apoc.meta.type(n.color) = 'STRING[]' return n.name, n.color

此外apoc.meta.typeName()函数和apoc.meta.type()相同

Neo4j怎么判断节点的属性的类型_第4张图片

压平:

对数据类型为字符串数组的属性值进行压平,中间用逗号隔开,逗号后边跟一个空格,末尾不带有括号。
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函数。

Neo4j怎么判断节点的属性的类型_第5张图片

若将color属性为字符串数组的,设置为字符串数组中的第一个元素:
match(n:Fruit) where apoc.meta.type(n.color) = 'STRING[]' set n.color = n.color[0]


连接:

APOC 用户手册 3.4.0.1 链接中包含可以查询APOC的过程和函数,如下

Neo4j怎么判断节点的属性的类型_第6张图片
查询APOC的过程和函数

参考:

http://neo4j.com.cn/topic/5ae72f3951bad0a10b198cca
https://blog.csdn.net/HaiYang_Gao/article/details/81320889
http://neo4j.com.cn/topic/5b5996abd40e09d75e4d235f

你可能感兴趣的:(Neo4j怎么判断节点的属性的类型)