我想在关系的属性数组中找到所有值及其出现次数。
我有三个节点,每个节点都有一个关系属性,它是一个字符串数组。
1- [“444”],2- [“222”,“111”]和3- [“444”]
我尝试的是:
MATCH (:Person { field: "B" })-[r:ALIKE]->(person)
RETURN r.at, COUNT(r.at)
目前的结果:
r.at COUNT(r.at)
["222", "111"] 1
["444"] 2
我的期望:
r.at COUNT(r.at)
["222"] 1
["444"] 2
["111"] 1
或
r.at COUNT(r.at)
"222" 1
"444" 2
"111" 1
如果我得到值而不是数组,那么会更好。
如果还有一个关系“111”和“222”,它应该是这样的:
r.at COUNT(r.at)
"222" 2
"444" 2
"111" 2
我应该如何更改当前查询? 任何帮助将不胜感激。
答案 0 :(得分:3)
让我们重新创建测试数据集:
CREATE
(:Person {id: 1, at: ['444']}),
(:Person {id: 2, at: ['222', '111']}),
(:Person {id: 3, at: ['444']})
要计算单个字符串,UNWIND
每个列表并计算其元素的人员节点数(p
):
MATCH (p:Person)
UNWIND p.at AS at
RETURN at, count(p)
结果是:
╒═════╤══════════╕
│"at" │"count(p)"│
╞═════╪══════════╡
│"111"│1 │
├─────┼──────────┤
│"444"│2 │
├─────┼──────────┤
│"222"│1 │
└─────┴──────────┘