我有一个:用户节点之间的爱好关系。
爱好关系包含List属性{ hobbies:['football','hockey'] }
现在我正在迭代数据流,我希望将业余爱好唯一地合并到这个列表中(就像一个集合)。我尝试使用这样的coalesce:
MERGE (from)-[rel:hobbies]->(to)
set rel.hobbies= COALESCE(rel.hobbies, []) + 'football';
问题是现在我的属性包含重复项
{ hobbies:['football','hockey','football'] }
我怎样才能避免重复?
答案 0 :(得分:1)
此Cypher查询无需APOC程序即可运行。
MERGE (from)-[rel:hobbies]->(to)
WITH rel, COALESCE(rel.hobbies, []) + 'football' AS hobbies
UNWIND hobbies as r
WITH rel, collect(distinct r) AS unique
set rel.hobbies = unique
此查询使用UNWIND扩展爱好数组,然后将collect唯一的爱好扩展为名为unique
的变量。如果您在Neo4j服务器中没有APOC程序,请使用此查询。
答案 1 :(得分:1)
[增订]
此查询将添加' football'仅在hobbies
集合尚不存在时(通过先检查):
MERGE (from)-[rel:hobbies]->(to)
FOREACH(x in CASE WHEN NOT ('football' IN rel.hobbies) THEN [1] END |
SET rel.hobbies = COALESCE(rel.hobbies, []) + 'football')
您应该使用parameter来代替硬编码添加的爱好(例如,'足球')。
此外,您应该考虑更改数据模型以使用Hobby
个节点来表示不同的爱好,这是一种更加面向图的方法。