是否有一种简单的方法可以确保Neo4j / Cypher中集合中的元素是唯一的?像将集合变成哈希集的东西?
答案 0 :(得分:2)
根据您的目的,您可以使用Cypher执行此操作。
例如,如果您只想将项目添加到属性中,只有它不存在,您可以通过以下几种方式添加项目。
此示例过滤查询,如果集合修改是唯一要修改的属性,则该示例很有用:
START n=node({id}) WHERE NONE(x IN n.cols WHERE x = {val}) SET n.cols = n.cols + {val} RETURN n;
下一个示例将最终总是修改属性,但会确保唯一性,如果还需要同时修改某些其他属性,这将是一个有用的方法,但副作用是项目的顺序将是改变:
START n=node({id})
WITH n, FILTER(x IN n.cols WHERE x <> {val}) as existingCols
SET n.cols = existingCols + {val}
RETURN n
答案 1 :(得分:1)
实体(节点/关系)属性没有Set
的概念,它们具有键/值,而允许的值是原始/字符串数组。
如果您需要Set
类似的功能,则应由您的应用程序插入数据以强制执行此唯一性。
Cypher也没有任何功能。
答案 2 :(得分:-1)