Neo4j模式理解在where子句中失败了路径条件

时间:2018-05-22 21:35:45

标签: neo4j cypher

我正在使用Neo4j 3.4并且正在努力解决这个特定的查询

MATCH (u:User)-[:IS_A_MEMBER_OF]->(c:Church)
RETURN size([(p:Post)<-[:POSTED]-(:User)-[:IS_A_MEMBER_OF]->(c) WHERE NOT (u)-[:ACKNOWLEDGED|POSTED]->(p) | p])

此查询旨在获取用户尚未确认且未自行发布的给定教会的帖子数。换句话说,它应该检索教会成员的所有帖子,然后找出用户u没有确认或发布的帖子并返回计数。

不幸的是,我无法弄清楚为什么Neo4j没有在where子句中进行检查。我缺少哪些关于模式理解的东西?因为所有用户返回的号码都是相同的,无论他们是否已经确认或发布了任何帖子。

谢谢!

2 个答案:

答案 0 :(得分:0)

以下是一个工作示例,我使用count代替sizesize代表数组,此处有节点行,count将聚合所有行结果。

MATCH (u:User)-[:IS_A_MEMBER_OF]->(c:Church),
      (c)<-[:IS_A_MEMBER_OF]-(:User)-[:POSTED]->(p:Post)
WHERE NOT (u)-[:ACKNOWLEDGED|POSTED]->(p)
RETURN c, u, count(p)

每个教会和这个教会成员的回报,一些未被承认的帖子,不是由会员发布的。

答案 1 :(得分:0)

我提交了类似的错误报告。从3.3.6开始,这似乎是一个问题。

https://github.com/neo4j/neo4j/issues/11967