在Cypher中,我可以在更新其值之前检查属性是否为列表



我们正在更新数据库中的数据,对于某些节点,由于遗留数据,我们可能会发现属性为字符串或列表。我想将字符串转换为空列表并保持列表原样。我试过这样做:

MATCH (a:part) WHERE NOT EXISTS((a.serials)[0]) SET a.serials=[] return a

但是它只是抛出一个错误。

任何想法?

Cypher没有这个内置函数,但是你可以使用一个小hack来检查添加一个元素到属性中是否会使其大小增加1,例如

MATCH (n:Award)
RETURN size(n.years + 11) = size(n.years)+1 AS isList

+符号,添加元素,连接或求和。因此,为了区分字符串和数组,我们需要加两位数字。

您需要使用APOC库来检查属性类型:

MATCH (a:part) 
WHERE NOT  apoc.meta.isType(a.serials) = "LIST"
SET a.serials=[] 
return a

您可以查看文档获取更多信息:https://neo4j.com/labs/apoc/4.1/overview/apoc.meta/apoc.meta.isType/

最新更新