有没有办法在 SDN 4.0 中获取节点的所有标签

Is there a way to get all the labels for a node in SDN 4.0

我想获取属于一个节点的所有标签,在 SDN 4.0 中是否有办法在一个查询中执行此操作?

比如我现在的repo是这样的

Book findById(Long bookId);

@Query("MATCH (n:Book) where id(n)={0} set n:AnotherLabel return n")
Book updateBookLabel(Long bookId);

有没有我可以简单的

book.getLabels();

检索此书节点的所有标签。

书的class是

@NodeEntity
public class Book extends Something {
}

是的,默认情况下,我的 Book 节点应该有两个标签 BookSomething。因为我在 repo 中有一个更新方法来添加另一个标签。无论如何,我可以取回所有 3 个标签的书吗?

谢谢

执行此操作的唯一方法是通过自定义查询 -

@Query("MATCH (n:Book) where id(n)={0} return labels(n) as labels")
List<String> getBookLabels(Long bookId);

(未测试)

根据评论更新

为了return标签和单个查询中的节点属性,使用@QueryResult-

SDN 4.0(无法将自定义查询中的节点和关系映射到查询结果中的域实体):

@QueryResult
public class BookResult {
    Long id;
    Map<String,Object> node;
    List<String> labels;
 }

@Query("MATCH (n:Book) where id(n)={0} return labels(n) as labels, ID(n) as id, {properties: n} as node")
BookResult getBookLabels(Long bookId);

SDN 4.1

 @QueryResult
 public class BookResult {
      Book node;
      List<String> labels;
 }

 @Query("MATCH (n:Book) where id(n)={0} return labels(n) as labels, n as node")
 BookResult getBookLabels(Long bookId);

是的,这是一个可行的例子

实体

public class Book {
  @Labels
  Set<String> labels= new HashSet<>();
  private Long id;
}

回购

public interface BookRepository extends GraphRepository<Book> 
{
}

那个var labels会包含一个节点的所有标签,因为它是用@Label注释的,所以你可以在你想要的时候做book.getlabel()甚至setLabel(),如果你想.

我使用 spring boot 1.4.0neo4j community 3.0.4 这个例子。