图怪癖还是虫子?节点合并回来

时间:2013-12-16 13:31:22

标签: neo4j cypher

我已设置图表要点以显示我的问题: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]

1 个答案:

答案 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]

http://gist.neo4j.org/?8008646