我需要做类似的事情:
@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) 哪里...
实现此目标的正确语法是什么?
目前只有将
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(..)}
)可能是有意义的。