如何在Neo4j中的一个查询中获取具有不同标签的节点

时间:2014-11-08 03:22:22

标签: neo4j

我有三种类型的节点:

(:Meal), (:User), (:Dish)

有关系:

(:Meal)<-[:JOIN]-(:User), (:Meal)<-[:ORDERED]-(:Dish)

现在我想在一个查询中获取用餐信息。我想得到这样的结果:

id: 1
name: xxx,
users: [1,2,3,4],
dishes: [23,42,42]

其中用户菜肴字段包含这些用户和菜肴的ID。

我试过了:

MATCH (meal:Meal)
OPTIONAL MATCH (meal)<-[:JOIN]-(user:User)
OPTIONAL MATCH (meal)<-[:ORDERED]-(dish:Dish)
RETURN id(meal), meal.name, COLLECT(ID(user)), COLLECT(ID(dish))

但是,此查询将生成大量用户和菜肴的重复。如果有N个用户和M个菜肴,它将匹配N * M个用户菜肴对。

我意识到我可以使用DISTINCT来删除重复。但是,我不确定这种查询的效率。

还有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

尝试使用WITH分隔查询的不同部分:

MATCH (meal:Meal)
OPTIONAL MATCH (meal)<-[:JOIN]-(user:User)
WITH meal, collect(ID(user)) as users
OPTIONAL MATCH (meal)<-[:ORDERED]-(dish:Dish)
RETURN id(meal), meal.name, users, COLLECT(ID(dish)) as dishes