如何在neo4j中执行嵌套查询

时间:2015-10-19 11:25:57

标签: neo4j

无法弄清楚如何在neo4j中做到这一点,所以请帮助我。

我有三种类型的对象:Person,Object,Opinion。 我想得到最新意见的清单,有意见的人,对象。我能这样做,这并不困难。 当我想让在同一查询中有相同对象意见的人时,我的问题就开始了。

这是我想要的结果:

  1. 人:Berit,对象:cerials,意见:好
    • 人:Arne,对象:cerials,意见:好
    • 人:Albert,对象:cerials,意见:不好
  2. 人:阿克塞尔,烹饪书,真棒
    • 人:Arne,对象:食谱,意见:不必要
    • 人:托夫,对象:食谱,意见:不好
    • 人:Berit,对象:烹饪书,意见:不好
  3. ......等等

1 个答案:

答案 0 :(得分:0)

你没有描述你的关系类型,所以我只是补上它们。以下是您的开始:

MATCH (target:Person)-[:HAS_OPINION]->(target_opinion:Opinion)-[:ON]->(object:Object)<-[:ON]-(other_opinion:Opinion)<-[:HAS_OPINION]-(other_person:Person)
WHERE target.id = {target_id}

目标可能基于id / name / whatever ......

您可以通过多种方式返回数据。它可能是一个非规范化的结果:

MATCH (target:Person)-[:HAS_OPINION]->(target_opinion:Opinion)-[:ON]->(object:Object)<-[:ON]-(other_opinion:Opinion)<-[:HAS_OPINION]-(other_person:Person)
WHERE target.id = {target_id}
RETURN target, target_opinion, object, other_opinion, other_person

或者你可以每行返回一个目标并将所有其他目标收集到一个对象数组中:

MATCH (target:Person)-[:HAS_OPINION]->(target_opinion:Opinion)-[:ON]->(object:Object)<-[:ON]-(other_opinion:Opinion)<-[:HAS_OPINION]-(other_person:Person)
WHERE target.id = {target_id}
RETURN
  target,
  target_opinion,
  object,
  collect({opinion: other_opinion, person: other_person}) AS others