我创建了新的数据集来解释我想要的结果。 这是link
或者您可以使用cypher触发此命令。
create
(_6 {UserName:"dhansukh", UserProfileID:'1000', EMailID:'f@xyz.com'}),
(_5 {UserName:"dhruv", UserProfileID:'516', EMailID:'e@xyz.com'}),
(_4 {UserName:"dharmistha", UserProfileID:'5262', EMailID:'d@xyz.com'}),
(_3 {UserName:"dinesh", UserProfileID:'995', EMailID:'c@xyz.com'}),
(_2 {UserName:"dharmesh", UserProfileID:'502', EMailID:'b@xyz.com'}),
(_1 {UserName:"manish", UserProfileID:'1', EMailID:'a@xyz.com'}),
_1-[:friends {ApprovalStatus: 1} ]->_2,
_1-[:friends {ApprovalStatus: 1} ]->_3,
_1-[:friends {ApprovalStatus: 2} ]->_5,
_2-[:friends {ApprovalStatus: 1} ]->_3,
_2-[:friends {ApprovalStatus: 1} ]->_5,
_3-[:friends {ApprovalStatus: 1} ]->_4
现在我正在尝试关注查询,但是没有给出我预期的结果。
START me=node:node_auto_index(UserProfileID = '1'), other=node(*)
MATCH pMutualFriends=me-[r?:friends]-mf-[r1:friends]-other
WHERE other.UserName =~ '(?i)dh.*' AND other.UserProfileID <> 1
RETURN other.UserProfileID, other.UserName, r.ApprovalStatus, COUNT(pMutualFriends) AS mutualCount
在上面的结果集中,我得到了重复的记录,(由于ApprovalStatus),如果我删除?从关系,它只显示链接节点,但我希望所有节点都以'dh'开头。节点6也不见了,不知道为什么?在某些情况下,相互计数也显示错误。只有那个节点应该在相互计数中考虑,它具有ApprovalStatus = 1.像登录节点(例如节点1)和搜索节点都具有关系的属性ApprovalStatus = 1.
编辑: 我的预期结果集:
UserProfileID UserName ApprovalStatus MutualCount
------------- -------- -------------- -----------
502 dharmesh 1 2 (node 3 & 5 )
516 dhruv 2 1 (node 2)
5262 dharmistha null 1 (node 3)
1000 dhansukh null 0
编辑: 我正在更新图像以便清楚地理解。
我在过去的20-25天内遇到了这个问题,并没有得到正确的解决方案,我不知道问题出在哪里。我已经在stackoverflow上多次发布了这个问题。 这里是link,this和this等等。
答案 0 :(得分:1)
正如我在评论中所说,尝试同时查询已连接和断开连接的节点似乎不是一个好主意。
如果您只想连接节点,请尝试以下查询:
START me=node:node_auto_index(UserName = 'manish')
MATCH me-[:friends]-mf-[:friends]-other, me-[r?]-other
WHERE other.UserName! =~ '(?i)dh.*'
RETURN DISTINCT ID(other), r.ApprovalStatus AS status, count(mf) AS mutual, ID(me)
ORDER BY mutual DESC , status ASC
请注意,我必须在匹配条款中添加另一个模式,因为您的批准状态介于(我)和(其他)之间,而不是(我)和(共同朋友)之间,这就是您正在做的事情!
这将返回您预期答案的前3行并忽略dhansukh。
答案 1 :(得分:0)
这个怎么样? http://console-test.neo4j.org/?id=8lloq1
START me=node:node_auto_index(UserProfileID = '1'), other=node(*)
MATCH pMutualFriends=me-[r?:friends]-mf-[r1?:friends]-other
WHERE other.UserName! =~ '(?i)dh.*' AND other.UserProfileID? <> 1 AND r.ApprovalStatus=1
RETURN DISTINCT (other.UserProfileID?),ID(other),me.EMailID?, other.EMailID?, other.UserName?, r.ApprovalStatus, COUNT(pMutualFriends) AS mutualCount