Neo4j Cypher查询需要帮助才能获得预期的响应
您好–我正在寻找一个密码查询的帮助,该查询没有返回问题“节点1固定到哪个板取决于哪个用户登录?”的预期结果 为user2获得了错误的结果。我希望可选的匹配将“捕获”user2作为可以访问该板的工作组的成员 我尝试了几种不同的匹配语句、联合等组合 谢谢-杰夫 我使用以下查询在中创建了一个图形:Neo4j Cypher查询需要帮助才能获得预期的响应,neo4j,cypher,Neo4j,Cypher,您好–我正在寻找一个密码查询的帮助,该查询没有返回问题“节点1固定到哪个板取决于哪个用户登录?”的预期结果 为user2获得了错误的结果。我希望可选的匹配将“捕获”user2作为可以访问该板的工作组的成员 我尝试了几种不同的匹配语句、联合等组合 谢谢-杰夫 我使用以下查询在中创建了一个图形: CREATE (N1:node { name:"node1" })-[:PINNED_TO]->(B1:board { name:"board1" }),(N1)-[:PINNED_TO]->(
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替换每个用户):
如果“user2”已登录,则I错误地获取以下信息:
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
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
user3 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
user1 node1 PINNED_TO board1
user1 node1 PINNED_TO board2
user1 node1 PINNED_TO board3
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
user3 node1 PINNED_TO board3
U1
和U3
有一个传出的关系,创建了关系,但是U2
(对于user2
)没有,所以你的第二个匹配的将永远不会匹配U2
此外,正如@WilliamLyon所说,在查询中需要使用workgroup
而不是workgroup
。但修复这一问题不足以使查询正常工作。最终使用联合匹配而不是可选匹配。有关更多信息,请参阅
谢谢大家的帮助和建议。干杯。不确定这是否是问题所在,但对于工作组
节点标签,您有两种不同的情况:工作组
在CREATE语句中,而工作组
在匹配中,这两种情况将不匹配,因为标签区分大小写。感谢您捕捉到这一点。然而,正如@cybersam提到的,这还不足以解决问题,因为user2与board2没有传出关系。我原以为可选匹配会“捕获”到这一点,但它失败了,我将尝试在查询的这一部分中指定更多的节点。还有其他想法吗?明白了。我理解它为什么失败。我将在查询的这一部分尝试更多的节点规范。关于如何“抓住”board2有什么想法吗?