我正在通过php发送密码查询。
match (n:person)-[:watched]->(m:movie)
where m.Title in $mycollection
return count(distinct n.id);
这将返回观看我收藏的电影的人数。 我实际上想返回名称列表,并返回n.name正常。
当我尝试同时返回n.name和count(distinct n.id)时,我丢失了总计数并获得了每行的计数。
match (n:person)-[:watched]->(m:movie)
where m.Title in $mycollection
return n.name, count(distinct n.id);
不起作用。计数列每行显示为1。
在使用php时,我也尝试过:
$count = $result->getNodesCount();
无济于事。所以我用php来计数数组。但是感觉Cypher应该能够做到,对吧?
答案 0 :(得分:1)
return n.name, count(distinct n.name)
的意思是“返回每个不同的n.name
值及其不同值的数量”。该数字必须始终为1,因为显然不同的值是不同的。
如果您实际上是在寻找每个人与标题为$mycollection
的电影有外向联系的次数,请改为这样做(其中count(*)
会计算给定{ {1}}被匹配):
n.name
请注意,上述查询省略了在查询中找到的MATCH (n:person)-->(m:movie)
WHERE m.Title in $mycollection
RETURN n.name, count(*);
模式,因为该语法([watched]
前没有冒号)根本不进行过滤。它将关系仅分配给名为watched
的变量,但没有使用该变量,因此是多余的。
如果您打算使用watched
作为关系类型,请执行以下操作:
watched
此修改后的查询返回每个人观看标题为MATCH (n:person)-[:watched]->(m:movie)
WHERE m.Title in $mycollection
RETURN n.name, count(*);
的电影的次数