【问题标题】:Rendering a dynamic list of labels from a List<String>从 List<String> 呈现标签的动态列表
【发布时间】:2023-02-21 18:43:37
【问题描述】:
我需要做类似的事情:
@Query("MATCH (n:`:#{literal(#label)}`) WHERE n.entityId=$entityId RETURN n")
Mono<VisibilityGroup> findNode(UUID entityId, String label);
但在 OR 中指定标签列表:
Mono<VisibilityGroup> findNode(UUID entityId, List<String> labels);
如果标签是 {"A","B"} 这应该生成:
匹配 (n:A|B) 哪里...
实现此目标的正确语法是什么?
【问题讨论】:
标签:
cypher
spring-data-neo4j
【解决方案1】:
目前,只有将 List<String> 与 String 和 | 分隔符连接起来才有可能。
String labels = String.join("|", List.of("A", "B"));
或者
String labels = new StringJoiner("|")
.add("A")
.add("B")
.toString();
literal 函数将创建一个 [A,B] 值,该值与模式中的预期模式不兼容(很明显)。
从长远来看,评估是否有可能在包含对 Spring Data Neo4j 的查询的 Spring 表达式语言中集成更专业的关键字(如 #{labels(..)})可能是有意义的。