与一个或多个标签匹配节点
#教程 #database #neo4j #cypher

假设我们想找到所有在给定标签中至少具有一个标签的节点。

找到具有标签的节点 person 电影或两者兼而有之。

有两种方法可以在Cypher中实现这一目标:一个静态条件或动态的条件。

静态的地方

所需的标签直接嵌入了Cypher查询的状态。

MATCH (n) 
WHERE (n:Person OR n:Movie) 
RETURN n

此选项非常有效,因为查询只需要对提供的每个标签执行标签扫描,然后结合两个结果并删除重复节点,即节点和两个标签。但是,添加新标签需要更改查询并因此更新代码。

Query execution plan for static where condition

静态的查询执行计划,条件

动态的地方

我们可以将标签作为查询参数$labels提供,而不是将标签嵌入到Cypher查询中。此参数是一个字符串数组,我们在执行查询时将其传递给neo4j驱动程序。

MATCH (n) 
WHERE any(label in labels(n) WHERE label IN $labels)
RETURN n

此选项的优势是,如果所需的标签更改,我们不必更改查询。但是,执行效率可能较低,因为Neo4J首先搜索所有节点,然后将标签过滤应用于结果。

Query execution plan for dynamic where condition

动态的查询执行计划,条件

请让我知道是否还有其他事情要考虑或我不知道其他选择。