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

5
Neo4j最近推出了call db.labels();,它可以返回数据库中使用的所有标签,而不需要进行全面扫描。
是否有类似的指令可以返回数据库中使用的所有属性键,无论节点如何?并且是否有针对标签参数化的指令,即返回至少具有给定标签的一个节点中使用的所有键?
同样,我知道如何使用全面扫描来执行任一查询,但我担心它们不会很有效。我知道这样的函数必须是Web浏览器用于在左列中显示所有属性键的函数。
3个回答

7
尝试使用以下查询,它将返回图中的所有标签以及每个标签下节点的属性:
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

1
我的1.5M节点数据库花费了13350毫秒。这相当不错,我原本预计会更糟糕,所以如果没有安装APOC,这可能是一个选项,谢谢。 - zakmck

7

有一个名为apoc.meta.dataAPOC过程。关于此过程的APOC文档如下:

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

call apoc.meta.data();

生成:

╒═════════╤══════════╤═══════╤════════╤═══════╤═══════════╤═════════╤═══════╤════════╤═══════════╤════════════╤══════╤═══════╤═══════╤═════════════╤═════════════╕
│"label""property""count""unique""index""existence""type""array""sample""leftCount""rightCount""left""right""other""otherLabels""elementType"│
╞═════════╪══════════╪═══════╪════════╪═══════╪═══════════╪═════════╪═══════╪════════╪═══════════╪════════════╪══════╪═══════╪═══════╪═════════════╪═════════════╡
│"User""age"0falsefalsefalse"INTEGER"falsenull0000[][]"node"       │
├─────────┼──────────┼───────┼────────┼───────┼───────────┼─────────┼───────┼────────┼───────────┼────────────┼──────┼───────┼───────┼─────────────┼─────────────┤
│"Product""name"0falsefalsefalse"STRING"falsenull0000[][]"node"       │
├─────────┼──────────┼───────┼────────┼───────┼───────────┼─────────┼───────┼────────┼───────────┼────────────┼──────┼───────┼───────┼─────────────┼─────────────┤
│"Product""price"0falsefalsefalse"STRING"falsenull0000[][]"node"       │
├─────────┼──────────┼───────┼────────┼───────┼───────────┼─────────┼───────┼────────┼───────────┼────────────┼──────┼───────┼───────┼─────────────┼─────────────┤
│"Product""color"0falsefalsefalse"STRING"falsenull0000[][]"node"       │
└─────────┴──────────┴───────┴────────┴───────┴───────────┴─────────┴───────┴────────┴───────────┴────────────┴──────┴───────┴───────┴─────────────┴─────────────┘

一种过滤的方法是像这样做:

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

上面的查询返回了“Product”和“OtherLabel”标签的结果。

3
除了Trinadh在标签上为非apoc用户提供的内容之外,以下是关系类型的Cypher调用:
MATCH (n)-[r]-(n1)
WITH type(r) AS type , KEYS(r) AS keys
UNWIND keys AS key
RETURN DISTINCT type, COLLECT(DISTINCT key) AS props
ORDER BY type

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接