给定一个属性列表,找出节点属性中提到的内容

时间:2014-02-25 14:11:00

标签: neo4j cypher

如果我有一个字符串列表。例如。 ["test1","test2","test3","test4"]并且有一个Neo4j数据库,其中包含两个节点,其属性myProperty分别设置为"test1""test3"

我想创建一个使用列表的Cypher表达式,并标识列表中哪些元素不存在于node.myProperty上 - 这样在上面的示例中它将返回["test2","test4"]。这是可能的 - 如果是这样,密码表达式会如何?

作为替代方案,可以返回实际存在的属性列表 - ["test1","test3"]

我可以为每个列表元素做一个声明,但由于列表可能会很长,我想在一个声明中实现它。

2 个答案:

答案 0 :(得分:2)

MATCH (n) where has(n.myProperty) 
WITH collect(n.myProperty) as set1
return FILTER(t in set1 WHERE NOT t in ["test1","test2","test3","test4"]) as set2

返回的set2将是图形

中不作为myProperty存在的那些

答案 1 :(得分:2)

Sumeet让我朝着正确的方向前进(+1为此)。但是它会返回我的数据库中不在集合中的所有n.myProperty。我想要回复我的集合中的所有单词而不是任何n.myProperty。这是这样做的:

MATCH (n:Node) where has(n.myProperty) 
WITH collect(n.myProperty) as set1
return FILTER(t in ["test1","test2","test3","test4"] WHERE NOT t in set1 ) as set2