有没有办法返回特定标记节点的所有属性键的不同列表

Ben*_*n A 4 label properties distinct neo4j cypher

我需要获得在图表中的一组节点上创建的所有属性的明确列表。我知道要做的或在搜索中找到的所有内容都将返回此类标签的所有节点及其各自不同属性的列表。例如:

CREATE (p:Person { name: 'John', age: 40, address: '100 main st' });
CREATE (a:Animal { name: 'Spot', type: 'dog', age: 2, diet: 'dry food'});
CREATE (a:Animal { name: 'Goldie', type: 'fish', family: 'carp' });
Run Code Online (Sandbox Code Playgroud)

我想得到一个不同的列表,只返回所有动物的所有属性键。

[ name, type, age, diet, family ]
Run Code Online (Sandbox Code Playgroud)

做这样的事情:

MATCH (a:Animal) RETURN distinct keys(a);
Run Code Online (Sandbox Code Playgroud)

返回每个节点的列表:

[name, type, age, diet]
[name, type, family]
Run Code Online (Sandbox Code Playgroud)

我只想要所有一种标签类型的现有属性键的列表。它还需要能够扩展到数百万个节点。

Dav*_*ett 5

只需展开关键集合并重新组合它们即可。

MATCH (a:Animal) 
UNWIND keys(a) AS key
RETURN collect(distinct key)
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望它们按字母顺序排序,您可以这样做

MATCH (a:Animal) 
UNWIND keys(a) AS key
WITH DISTINCT key
ORDER by key
RETURN collect(key)
Run Code Online (Sandbox Code Playgroud)

或者您可以返回每个键的计数

MATCH (a:Animal) 
UNWIND keys(a) AS key
RETURN key, count(*) AS num
ORDER by num DESC, key
Run Code Online (Sandbox Code Playgroud)