我已设置图表要点以显示我的问题:http://gist.neo4j.org/?dropbox-2900504%2Fnames.adoc
我遇到的问题是,如果我没有专门返回人员节点或人员ID,我的两个人节点会合并为一个返回。它们在人员节点上都有相同的第二个名称和相同的标签(id 3和4,Tom和Sarah Smith)。
如果我向person节点添加标签,就像本例中的James Smith(id 1)一样,没有问题。如果我要删除他的:Foo标签,他也会在查询2中与Sarah和Tom合并。
如果这不是错误,有没有办法让我明确地返回这些人而不返回人员ID或节点?
我已经在上面的要点中展示了问题,两个查询之间的唯一区别是第二个查询也返回了人员ID。
非常感谢你的帮助,
tekiegirl
修改
我希望我的结果看起来如何(基本上就像要点中的查询3,但没有人ID):
labels names
[Person, Bar] [Sally, Jones]
[Person, Foo] [James, Smith]
[Person] [Sarah, Smith]
[Person] [Tom, Smith]
答案 0 :(得分:3)
我想也许你不期望用collect
得到的聚合行为。这是你想要得到的吗?
MATCH (:Club { name:'FooFighters' })-[:MEMBER]->(p:Person)-[r:NAMED]->(n:Name)
RETURN labels(p) AS labels, n.content AS names
ORDER BY r.order, names
使用更多信息进行更新,现在我了解您在WITH中使用多个名称和订单执行的操作:
实际上,{p>collect
通过其他术语执行隐式组,使它们不同并对它们进行分组。如果你想在人物上分组,那么你需要在你p
进入的WITH / RETURN中加入人collect
。这是一个重写。如果需要,您可以避免在最后一个return语句中返回p
:
MATCH (:Club{name:'FooFighters'})-[:MEMBER]->(p:Person)-[r:NAMED]->(n:Name)
WITH p, n, r
ORDER BY r.order
WITH p, labels(p) as labels, collect(n.content) as names
RETURN labels, names
ORDER BY names[length(names)-1], names[0]