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
绝对干净,但我需要检索数据选手也。我能得到的结果与两场比赛,但是当我尝试第三上没有骰子..更多的东西是这样的: 启动O = 比赛UL 2013-05-09 03:32:12
上面编辑我的答案,这有帮助吗? – Luanne 2013-05-09 03:44:05
是的..好多了!它让我走上了正确的道路,我想..还有一个问题。一个人如何处理收藏品?这是否发生在Neo/Cypher之外?我正在使用Ruby on Rails - 我只是简单地将这些集合并在我的代码中解析它们?还是仅供Cypher使用的集合?顺便说一句谢谢! – 2013-05-09 05:37:58