我在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和Node1之间是相互的。 Node2因为它有两个节点的ApprovalStatus = 1。
记录#2:
node1和amp;之间没有相互作用。 node3和ApprovalStatus = 2,因为Node1已向node3发送了请求,但它尚未挂起。
记录#3:
与记录#2
记录#4& 5:
node1和amp;之间没有相互作用。 node4和ApprovalStatus = null,因为Node1从未向node4&发送请求。节点5。
我在here
上创建了一些虚拟数据因此,您可以测试查询。我试图从过去的10-15天得到这个结果,但我无法获得成功。有没有办法达到这个结果。
感谢。
答案 0 :(得分:0)
你问题中的关系表没有任何相互关系,这就是你正在寻找的东西,所以我创建了一个very similar example,它增加了从B到A的附加关系。
我向:FRIEND
关系添加了“已接受”和“已请求”的状态,但正如@Stefan在评论中提到的那样,使用不同的关系类型会更容易,例如:REQUESTED_FRIEND
和{{ 1}}来区分这两者。在这种情况下,您可以从以下查询中删除WHERE子句:
:FRIEND
返回:
START n=node(*)
MATCH n-[r:FRIEND]->m, m-[r2:FRIEND]->n
WHERE r.status='accepted' AND r2.status='accepted'
RETURN n, COUNT(m) AS MutualCount, COLLECT(m.name)