是一个简单的查询,但我不知道哪个cypher操作或java集合对于获得预期结果很有用。
因此,再次与分配到特定出租车的用户合作,每个用户都有一个网格目的地(下车)。
首先,我返回分配给特定出租车的用户和相同的dropOff时间:
MATCH (g:Grid)<-[d:DROP_OFF]-(u:User)-[rt:ASSIGNED]->(t:Taxi {name: 'Taxi1813'})
WHERE d.time = '04:38'
RETURN u.name, g.name as LocationGrid
u.name LocationGrid
UserTestSame Grid1239
UserTestNew Grid919
User177 Grid1239
我想添加一个条件来返回位于同一网格中的用户。结果集不固定;我可能有 n 数字f用户。
是否有一种简单的方法可以做到这一点,或者我应该使用java中的集合来比较每个网格。
提前谢谢
答案 0 :(得分:1)
您可以使用聚合Cypher的内置聚合函数,例如collect
:
MATCH (g:Grid)<-[d:DROP_OFF]-(u:User)-[rt:ASSIGNED]->(t:Taxi {name: 'Taxi1813'})
WHERE d.time = '04:38'
RETURN g.name as LocationGrid, collect (u.name) as users
LocationGrid users
Grid1239 [UserTestSame, User177]
Grid919 [UserTestNew]
您的查询假定分配到同一出租车的用户具有相同的下车时间?似乎让我感到困惑,但我可能会遗漏一些东西。
顺便说一句,我不认为存储和匹配下拉时间作为字符串将非常适合以下原因:我建议将下拉时间建模为时间树。请参阅以下链接以供参考:
答案 1 :(得分:1)
//只需使用我上面的答案 此外,Neo4j可以选择使用收集,以便结果返回列表中。
匹配(N) - [] - &GT;(r)的 return n,collect(r)as collection
http://neo4j.com/docs/stable/query-aggregation.html#aggregation-collect
我认为你应该改变你的约会时间。不是字符串,而是更像yyyyMMddhhmmss,所以你可以比较。或任何其他方式。
将它存储为字符串也会更快。