NEO4j Return 来自数据库的嵌套、分层 JSON

NEO4j Return a nested, hierarchical JSON from a DB

我在 db 上有一个树模型,如图所示

分层嵌套json理想输出如下

Indexes
   ON :TTL(ttl) ONLINE 
   ON :City(cityName) ONLINE  (for uniqueness constraint)
   ON :Region(region) ONLINE  (for uniqueness constraint)
   ON :Sector(sectorName) ONLINE  (for uniqueness constraint)

Constraints
   ON ( city:City ) ASSERT city.cityName IS UNIQUE
   ON ( region:Region ) ASSERT region.region IS UNIQUE
   ON ( sector:Sector ) ASSERT sector.sectorName IS UNIQUE

如何使用密码请求从数据库生成 json 文件。

非常感谢。

所以...您的层次结构有点难以阅读...所以我将重点放在 JSON 响应部分。虽然 Neo4j 没有 Map 作为 属性 类型,但它在 Cypher 中是有效的。

要将结果汇总到 map,您可以使用这种格式

MATCH (c:City)<--(s:Sector)
RETURN {city_node:c, city_properties:PROPERTIES(c) name:c.name, sectors:COLLECT(s)} as city

基本上{} as varname定义你的地图,{}的内容定义键值对。

并且您可以像 WITH map1 + map2 as mymap 一样使用 + 运算符合并 2 个地图。在冲突的情况下,第二个映射中的值优先。

如果你只想要一个节点的属性,而不是整个节点的属性,你可以使用 PROPERTIES(c) function 而不是传入节点。

您很快就会注意到一件事,那就是这不会以递归方式工作。在您的情况下,它看起来固定在 2 层嵌套深度。所以这个限制应该不是问题。

附带说明一下,如果这是为了扩展,您可能希望让您的 Cypher 分页 (LIMIT+SKIP) 以缩短响应时间。 (只 return 你需要的东西)就此而言,最好聚合这个客户端,因为你可能会 return 经常为每个城市的一些部门。