Neo4j Cypher查询需要帮助获得预期的响应

时间:2016-03-02 19:35:24

标签: neo4j cypher

您好 - 我正在寻找有关cypher查询的帮助,该查询没有返回问题“哪个板是node1固定到哪个取决于哪个用户登录?”的预期结果。

为user2获取了错误的结果。我预计OPTIONAL MATCH将“捕获”user2成为可以访问该板的工作组的成员。

我尝试了几种不同的MATCH语句组合,UNION等。

谢谢 - 杰夫

我使用以下查询在http://console.neo4j.org/中创建了一个图表:

CREATE (N1:node { name:"node1" })-[:PINNED_TO]->(B1:board { name:"board1" }),(N1)-[:PINNED_TO]->(B2:board { name:"board2" }),(N1)-[:PINNED_TO]->(B3:board { name:"board3" })
CREATE (U1:user { name:"user1" })-[:CREATES]->(B1),(U1)-[:CREATES]->(B2),(U3:user { name:"user3" })-[:CREATES]->(B3)
CREATE (B1)-[:CAN_VIEW]->(V1:view { name:"creator" }),(B2)-[:CAN_VIEW]->(V2:view { name:"creator AND workgroup" }),(B3)-[:CAN_VIEW]->(V3:view { name:"everyone" })
CREATE (U2:user { name:"user2" })-[:MEMBER_OF]->(WG2:workgroup { name:"B2 workgroup" })-[:CAN_ACCESS]->(B2)

然后我用以下内容查询图表(用每个用户替换user.name):

MATCH (n:node)-[p:PINNED_TO]->(b:board)
MATCH (v:view)<-[:CAN_VIEW]-(b)<-[:CREATES]-(logged_in_user: user)
WHERE v.name = 'everyone' OR logged_in_user.name='user2'
OPTIONAL MATCH (b)<-[can_access:CAN_ACCESS]-(wg:workgroup)<-[:MEMBER_OF]-(logged_in_user)
WHERE logged_in_user.name='user2' OR can_access IS NOT NULL
RETURN DISTINCT logged_in_user.name, n.name, type(p), b.name

如果“user1”已登录,我正确地获得以下内容:

logged_in_user.name n.name  type(p)     b.name
user1               node1   PINNED_TO   board1
user1               node1   PINNED_TO   board2
user1               node1   PINNED_TO   board3

如果“user2”已登录,我错误会收到以下信息:

logged_in_user.name n.name  type(p)     b.name
user2               node1   PINNED_TO   board3

它应该已经返回:

logged_in_user.name n.name  type(p)     b.name
user2               node1   PINNED_TO   board2
user2               node1   PINNED_TO   board3

如果“user3”已登录,我正确地获得以下内容:

logged_in_user.name n.name  type(p)     b.name
user3               node1   PINNED_TO   board3

2 个答案:

答案 0 :(得分:0)

U1U3CREATES关系,但U2(对于user2)没有 - 所以你的第二个MATCH永远不会匹配U2

另外,正如@WilliamLyon所说,您需要在查询中使用workgroup而不是workGroup。但修复它不足以使您的查询工作。

答案 1 :(得分:0)

结束使用UNION MATCH而不是OPTIONAL MATCH。有关更多信息,请参阅http://neo4j.com/docs/stable/query-union.html

感谢大家的帮助和建议。欢呼声。