Node.js 可选匹配Neo4j

Node.js 可选匹配Neo4j,node.js,neo4j,cypher,Node.js,Neo4j,Cypher,以下是我的密码查询: MATCH (a : User), (user : User {username : 'lebron'}) WHERE a.phoneNumber IN ['757488374748','+9035115','+90390320303'] AND a.username <> 'lebron' OPTIONAL MATCH (user)-[f:FOLLOWS]->(a), (a)-[p : POSTS]->(b) RETURN DISTIN

以下是我的密码查询:

MATCH (a : User), (user : User {username : 'lebron'}) 
WHERE a.phoneNumber IN ['757488374748','+9035115','+90390320303'] 
  AND a.username <> 'lebron' 
OPTIONAL MATCH (user)-[f:FOLLOWS]->(a), (a)-[p : POSTS]->(b) 
RETURN DISTINCT COLLECT(b.postId) AS postId, a.username AS membername, 
  f.followRequestStatus AS followRequestStatus, user.private AS userPrivate;
MATCH(a:User),(User:User{username:'lebron'})
其中,['757488374748','+9035115','+90390320303'中的a.phoneNumber
和一个用户名“勒布朗”
可选匹配(用户)-[f:FOLLOWS]->(a)、(a)-[p:POSTS]->(b)
返回不同的COLLECT(b.postId)作为postId,a.username作为membername,
f、 followRequestStatus作为followRequestStatus,user.private作为userPrivate;
“a”节点是用户节点,“a”可以发布照片,跟踪其他用户,就像其他用户的照片一样,非常像instagram。这里发生的事情是,只有当节点a和b>之间存在关系-[p:POSTS]时,它才会给出followRequestStatus(f.followRequestStatus)correct。如果关系“p”不存在,则对于关系>“f”,即使关系f确实存在,也会返回null


您是否尝试过将两个可选匹配模式分离为两个单独的可选匹配

...
OPTIONAL MATCH (user)-[f:FOLLOWS]->(a)
OPTIONAL MATCH (a)-[p : POSTS]->(b) 
...
在开发人员文档中的可选匹配描述中:

[与匹配项相比]的区别在于,如果没有找到匹配项, 可选匹配将对模式的缺失部分使用null


当您使用两个由逗号分隔的独立模式时,我的假设是,如果两个匹配项都未找到,则模式的所有部分都将使用null。由于您希望:跟踪关系,即使没有来自a的:帖子,您也需要单独的可选匹配。

您的实际问题对我来说不是很清楚。您是否在询问如何实现followRequestStatus的正确输出?既然
b
是一个新引入的变量(来自
a
的帖子),那么我的结论是否正确,即只有
a
发布了一些内容(可以通过帖子集合检测到这些内容不是空的)时,才会输出followRequestStatus?followRequestStatus必须与a是否发布了任何内容无关,它可以为null,0或1,但在这种情况下,对于其无法匹配(a)-[p:POSTS]->(b)的所有条件,followRequestStatus显示为null,即使它有一些值。好的,明白了。我把你的描述误解为你的要求,而不是问题。我做错了什么@InverseFalcon@InverseFalcon:成功了!谢谢。