我在neo4j中创建了一些节点和关系,并希望用cypher进行查询 . 我正在解释更多关于它的内容如下 .
UserID UserName
------ --------
1 UserA
2 UserB
3 UserC
4 UserD
5 UserE
6 UserF
节点之间的关系如下:
UserID FriendID ApprovalStatus (1.Request Accepted, 2.Request Pending)
------ -------- ------------------------------------------------------
1 2 1
1 3 2
1 6 2
2 3 1
2 4 1
2 5 2
3 6 1
3 5 2
我的登录用户是节点1(例如UserA),并尝试从节点进行搜索 . 我期待neo4j的这个结果 .
Record # UserID UserName MutualCount ApprovalStatus
-------- ------ -------- --------------- --------------
1 2 UserB 1 (eg. node 3) 1
2 3 Userc 0 2
3 4 UserD 0 null
4 5 UserE 0 null
5 6 UserF 0 2
检查以下几点:记录#1:Node3(UserC)在Node1和Node2之间是相互的,因为它具有两个节点的ApprovalStatus = 1 .
记录#2:
node1和node3之间没有相互关系,而ApprovalStatus = 2,因为Node1已向node3发送了请求,但它尚未挂起 .
记录#3:
与记录#2中提到的情况相同
记录#4和5:
这里没有node1和node4之间的相互关系,而ApprovalStatus = null,因为Node1从未向node4和node5发送过请求 .
我在here上创建了一些虚拟数据
所以,你可以测试查询 . 我试图从过去的10-15天得到这个结果,但我无法获得成功 . 有没有办法达到这个结果 .
谢谢 .
1 回答
你问题中的关系表没有任何相互关系,这就是你正在寻找的东西,所以我创建了一个very similar example,它增加了从B到A的附加关系 .
我在
:FRIEND
关系中添加了状态"accepted"和"requested",但正如@Stefan在评论中提到的那样,使用不同的关系类型(例如:REQUESTED_FRIEND
和:FRIEND
)来区分这两者是更容易的 . 在这种情况下,您可以从以下查询中删除WHERE子句:返回: