有没有办法在 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 节点应该有两个标签 Book
和 Something
。因为我在 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.0 和 neo4j community 3.0.4 这个例子。
我想获取属于一个节点的所有标签,在 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 节点应该有两个标签 Book
和 Something
。因为我在 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.0 和 neo4j community 3.0.4 这个例子。