我有下面的图形,我想获得2个Task节点(即,两个显示日期的节点)。然后,我想获得WAS_BOUGHT关系,然后是MAKING_USE_OF关系。显然,我希望这些数据与匹配的给定任务相关。然后,我获取这些数据并在应用程序中创建一个Task对象,并将WAS_BOUGHT关系的列表和MAKING_USE_OF关系的列表存储为对象的属性。
我尝试在下面运行查询,但是重复很多。每当关系数据到达时,我都会再次获得任务数据,重复一次。在将其解析到我的应用程序之前,我希望先对neo4j中已有的数据进行条件处理。我只是觉得这样会更有效率。
MATCH (t:Task)-[r1:WAS_BOUGHT]->()
MATCH (t:Task)-[r2:MAKING_USE_OF]->()
WHERE ID(t) IN [40,60]
RETURN t, r1, r2
我可以将其分为3个查询,以避免重复,但是这将需要3次与数据库的连接,这似乎效率很低。
MATCH (t:Task)-[]->()
WHERE ID(t) IN [40,60]
RETURN t
MATCH (t:Task)-[r1:WAS_BOUGHT]->()
WHERE ID(t) IN [40,60]
RETURN r1
MATCH (t:Task)-[r2:MAKING_USE_OF]->()
WHERE ID(t) IN [40,60]
RETURN r2
您知道如何编写查询以获取以下格式的数据而不重复吗?
任务节点,WAS_BOUGHT关系,ID = 40的MAKING_USE_OF关系
任务节点,WAS_BOUGHT关系,ID = 60的MAKING_USE_OF关系
答案 0 :(得分:1)
每个Task
节点都有一行
// find the specific task nodes and WAS_BOUGHT relatioships
MATCH (t:Task)-[r1:WAS_BOUGHT]->()
WHERE ID(t) IN [40,60]
// aggregate the WAS_BOUGHT relationships per task
WITH t, collect(r1) AS bought
// with each task find what was used to shop
MATCH (t)-[r2:MAKING_USE_OF]->()
// return the task with the aggregate WAS_BOUGHT and MAKING_USE relationships
RETURN t, bought, collect(r2) AS making_use