Ne4j 如何返回所有节点标签与 Cypher?

我找不到使用 Cypher 返回节点标签的方法。

有人知道这个操作的语法吗?

53701 次浏览

有一个函数标签(节点)可以返回一个节点的所有标签。

 START n=node(*) RETURN labels(n)

获取所有不同的节点标签:

MATCH (n) RETURN distinct labels(n)

获取每个标签的节点计数:

MATCH (n) RETURN distinct labels(n), count(*)

如果你想要所有单独的标签(而不是组合) ,你可以随时展开答案:

MATCH (n)
WITH DISTINCT labels(n) AS labels
UNWIND labels AS label
RETURN DISTINCT label
ORDER BY label

如果您正在使用 JavaAPI,您可以快速获得数据库中所有 Label的迭代器,如下所示:

GraphDatabaseService db = (new GraphDatabaseFactory()).newEmbeddedDatabase(pathToDatabase);
ResourceIterable<Label> labs = GlobalGraphOperations.at(db).getAllLabels();

If you want to get the labels of a specify node, then use labels(node); If you only want to get all node labels in neo4j, then use this function instead: call db.labels;, never ever use this query: MATCH n RETURN DISTINCT LABELS(n). It will do a full table scan, which is very very slow..

Neo4j 3.0引入了程序 db.labels(),返回数据库中所有可用的标签。使用:

call db.labels();