Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j Cypher查询需要帮助才能获得预期的响应_Neo4j_Cypher - Fatal编程技术网

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

Neo4j Cypher查询需要帮助才能获得预期的响应,neo4j,cypher,Neo4j,Cypher,您好–我正在寻找一个密码查询的帮助,该查询没有返回问题“节点1固定到哪个板取决于哪个用户登录?”的预期结果 为user2获得了错误的结果。我希望可选的匹配将“捕获”user2作为可以访问该板的工作组的成员 我尝试了几种不同的匹配语句、联合等组合 谢谢-杰夫 我使用以下查询在中创建了一个图形: CREATE (N1:node { name:"node1" })-[:PINNED_TO]->(B1:board { name:"board1" }),(N1)-[:PINNED_TO]->(

您好–我正在寻找一个密码查询的帮助,该查询没有返回问题“节点1固定到哪个板取决于哪个用户登录?”的预期结果

为user2获得了错误的结果。我希望可选的匹配将“捕获”user2作为可以访问该板的工作组的成员

我尝试了几种不同的匹配语句、联合等组合

谢谢-杰夫

我使用以下查询在中创建了一个图形:

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有什么想法吗?