在 Cypher 中,我可以在更新其值之前检查 属性 是否为列表
In Cypher can I check if a property is a list before updating its value
我们正在更新数据库中的数据,对于某些节点,由于遗留数据,我们可能会发现 属性 作为字符串或列表。我想将字符串转换为空列表并保持列表不变。
我试过这样的事情:
MATCH (a:part) WHERE NOT EXISTS((a.serials)[0]) SET a.serials=[] return a
但它只是抛出一个错误。
有什么想法吗?
您将需要使用 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/
Cypher 对此没有内置函数,但您可以使用一个小技巧来检查向 属性 添加元素是否会将其大小增加 1 ,例如
MATCH (n:Award)
RETURN size(n.years + 11) = size(n.years)+1 AS isList
+
符号、添加元素、连接或求和。因此为了区分字符串和数组,我们需要添加两个数字。
我们正在更新数据库中的数据,对于某些节点,由于遗留数据,我们可能会发现 属性 作为字符串或列表。我想将字符串转换为空列表并保持列表不变。 我试过这样的事情:
MATCH (a:part) WHERE NOT EXISTS((a.serials)[0]) SET a.serials=[] return a
但它只是抛出一个错误。
有什么想法吗?
您将需要使用 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/
Cypher 对此没有内置函数,但您可以使用一个小技巧来检查向 属性 添加元素是否会将其大小增加 1 ,例如
MATCH (n:Award)
RETURN size(n.years + 11) = size(n.years)+1 AS isList
+
符号、添加元素、连接或求和。因此为了区分字符串和数组,我们需要添加两个数字。