如何使用 Cypher/Neo4J 获取所有节点或给定标签的所有属性键?

zak*_*mck 3 neo4j cypher

Neo4j 最近推出了call db.labels();,它可以生成数据库中使用的所有标签,大概不需要进行全面扫描。

属性键是否有类似的东西,即一些返回数据库中使用的所有键的指令,无论节点如何?标签上是否有参数化的东西,即返回至少一个具有给定标签的节点中使用的所有键?

同样,我知道如何使用完整扫描进行任一查询,但恐怕它们效率不高。我知道这样的函数必须是 Web 浏览器用来在左列上显示所有属性键的函数。

小智 8

尝试下面的查询,这将返回图中的所有标签以及每个标签下节点的属性:

MATCH(n) 
WITH LABELS(n) AS labels , KEYS(n) AS keys
UNWIND labels AS label
UNWIND keys AS key
RETURN DISTINCT label, COLLECT(DISTINCT key) AS props
ORDER BY label
Run Code Online (Sandbox Code Playgroud)


Bru*_*res 6

有一个名为的APOC 程序apoc.meta.data。有关此程序的 APOC 文档说:

apoc.meta.data:检查图形的子集以提供表格元信息。

call apoc.meta.data();
Run Code Online (Sandbox Code Playgroud)

产生:

??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?"label"  ?"property"?"count"?"unique"?"index"?"existence"?"type"   ?"array"?"sample"?"leftCount"?"rightCount"?"left"?"right"?"other"?"otherLabels"?"elementType"?
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?"User"   ?"age"     ?0      ?false   ?false  ?false      ?"INTEGER"?false  ?null    ?0          ?0           ?0     ?0      ?[]     ?[]           ?"node"       ?
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?"Product"?"name"    ?0      ?false   ?false  ?false      ?"STRING" ?false  ?null    ?0          ?0           ?0     ?0      ?[]     ?[]           ?"node"       ?
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?"Product"?"price"   ?0      ?false   ?false  ?false      ?"STRING" ?false  ?null    ?0          ?0           ?0     ?0      ?[]     ?[]           ?"node"       ?
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?"Product"?"color"   ?0      ?false   ?false  ?false      ?"STRING" ?false  ?null    ?0          ?0           ?0     ?0      ?[]     ?[]           ?"node"       ?
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

过滤的一种方法是执行以下操作:

call apoc.meta.data() yield label, property
with ['Product', 'OtherLabel'] as labels, property, label where label in labels
return property, label
Run Code Online (Sandbox Code Playgroud)

上述查询返回ProductOtherLabel标签的结果。