neo4j多个可选路径 - 密码

问题描述:

我正在跟踪用户是否喜欢和/或投票对象列表中的对象其他人张贴..我可以得到喜欢和票,但不是两个。 (一个人既可以喜欢也可以对物体投票,这些选项并不相互排斥)。neo4j多个可选路径 - 密码

要干脆这个问题让我描述它关系术语(左联接使用 - 始终返回的对象,如果该类型的记录存在只返回类似器和选民数据)

[object]+ -> liker 
     + -> voter 

我”什么D想回来的是:

objectID likerID voterID 
2343  null  88 
2345  11  null 
2382  44  1256 
2400  null  null 

然而,我切片的每一个方式,我不能让它出来这样。任何一行2400都会被跳过(我尝试过每个地方的所有组合),或者甚至将值从likerID转移到voterID列(bug?)。

这里是暗号的样本:

start objects=node(158) 
match contestant-[:POSTED]->object_node-[:POSTED_OBJECT]->objects<-[?:POSTED_OBJECT]-object_node_a<-[?:LIKES]-liker 
    , objects<-[?:POSTED_OBJECT]-object_node_b<-[?:VOTES]-voter 
    return id(object, id(liker), id(voter) 

它,即使我尝试其中id(object_node_a)= ID(object_node_b)...

如果我只是尝试不工作得到一个liker它的作品..同选民..但是当我试图做两个..炸弹..

我试过使用哪里等,但最终我从来没有得到完整的对象列表 - 它要么修剪在匹配的基础上列表,或者给我明确不能解决的笛卡尔积。

SQL实例:LEFT JOIN

我是一个SQL的家伙,所以让我这样解释 - 我左边一个对象表,我想离开它加入一个类似器表和选民表,并将单个行上的liker id和voter id连同对象数据一起返回。无论是否有选民或记录者记录,所有的对象记录都会被返回。

[object]+ -> liker 
     + -> voter 

这是否可能?

是否可以通过密码执行此操作?

希望我没有误解。为了得到

objectID likerID voterID 
2343  null  88 
2345  11  null 
2382  44  1256 
2400  null  null 

即所有对象和那些喜欢它,并投票支持它的ID,这个查询应该做它 -

start o=<lookup for objects> 
match ul-[like?:LIKED]->o, uv-[vote?:VOTED]->o 
return o,ID(ul),ID(uv) 

这将返回一个对象,没有票,喜欢,无论是票喜欢和任何一个。请注意,如果您有多个用户为可能的同一对象投票,那么您的对象行将为每个用户重复。你可能想这样做

start o=<lookup for objects> 
match ul-[like?:LIKED]->o, uv-[vote?:VOTED]->o 
return o,collect(ID(ul)),collect(ID(uv)) 

仍然得到每个对象的行,但用户ID的集合选票和喜欢。

要包括张贴的对象,以及人:

start o=node(4,5,6,7) 
match ul-[like?:LIKED]->o, uv-[vote?:VOTED]->o, c-[:POSTED_OBJECT]->o 
return o,ID(ul),ID(uv),ID(c) 

我创建了一个微小的样本一起玩:http://console.neo4j.org/r/in8g4w

+0

绝对干净,但我需要检索数据选手也。我能得到的结果与两场比赛,但是当我尝试第三上没有骰子..更多的东西是这样的: 启动O = 比赛UL 2013-05-09 03:32:12

+0

上面编辑我的答案,这有帮助吗? – Luanne 2013-05-09 03:44:05

+0

是的..好多了!它让我走上了正确的道路,我想..还有一个问题。一个人如何处理收藏品?这是否发生在Neo/Cypher之外?我正在使用Ruby on Rails - 我只是简单地将这些集合并在我的代码中解析它们?还是仅供Cypher使用的集合?顺便说一句谢谢! – 2013-05-09 05:37:58