首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >修改密码查询

修改密码查询
EN

Stack Overflow用户
提问于 2017-08-02 05:28:43
回答 2查看 52关注 0票数 1

我有如下所示的neo4j数据:

这里我有COUNTEY_PROVINCE关系,countryprovincePROVINCE_CITY关系,provincecityCOUNTRY_CITY关系,countrycity。当用户用country name调用api时,我想用city返回所有province。为此,我运行了以下查询:

代码语言:javascript
运行
复制
 MATCH path=(cn:Country { name: "Bangladesh" })-[:COUNTRY_PROVINCE]->(pv:Province)-[:PROVINCE_CITY]->(ct:City)
 RETURN { x:  nodes(path)  }

我得到了以下结果:(国家、省、市)

代码语言:javascript
运行
复制
  { x: nodes(path) }
  { "x": [ { "name": "Bangladesh"}, { "name": "Dhaka" }, { "name": "Dhaka" } ] }
  { "x": [ { "name": "Bangladesh"}, { "name": "Dhaka" }, { "name": "Narayanganj" } ] }
  { "x": [ { "name": "Bangladesh"}, { "name": "Sylhet" }, { "name": "Sylhet" } ] }
  { "x": [ { "name": "Bangladesh"}, { "name": "Khulna" }, { "name": "Khulna" }  ] }
  { "x": [ { "name": "Bangladesh"}, { "name": "Khulna" }, { "name": "Jessore" }  ]  }
  { "x": [ { "name": "Bangladesh"}, { "name": "Chittagong" }, { "name": "Chittagong" }  ]  }
  { "x": [ { "name": "Bangladesh"}, { "name": "Chittagong" }, { "name": "Comilla" }  ]  }

现在我的问题是,我怎样才能得到与省和联系城市的国家名单,例如:

代码语言:javascript
运行
复制
 [
    {
       country: {
           name: "Bangladesh",
           province: [
              {
                  name: "Dhaka",
                  city: [
                      { name: "Dhaka" },
                      { name: "Narayanganj" }
                  ]
              },
              {
                  name: "Sylhet",
                  city: [
                      { name: "Sylhet" }
                  ]
              },
              {
                  name: "Chittagong",
                  city: [
                      { name: "Chittagong" },
                      { name: "Comilla" }
                  ]
              },
              {
                  name: "Khulna",
                  city: [
                      { name: "Khulna" },
                      { name: "Jessore" }
                  ]
              }            
           ]
       }
    }
 ]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-02 11:35:09

我在这里模拟了你的情景。

加载初始数据集(类似于问题中描述的数据集):

代码语言:javascript
运行
复制
CREATE (c:Country {name:"Country A"})
CREATE (p1:Province {name:"Province A"})
CREATE (p2:Province {name:"Province B"})
CREATE (c1:City {name:"City A"})
CREATE (c2:City {name:"City B"})
CREATE (c3:City {name:"City C"})
CREATE (c4:City {name:"City D"})
CREATE (c)-[:COUNTRY_PROVINCE]->(p1)
CREATE (p1)-[:PROVINCE_CITY]->(c1)
CREATE (p1)-[:PROVINCE_CITY]->(c2)
CREATE (c)-[:COUNTRY_PROVINCE]->(p2)
CREATE (p2)-[:PROVINCE_CITY]->(c3)
CREATE (p2)-[:PROVINCE_CITY]->(c4)

查询:

代码语言:javascript
运行
复制
MATCH (cn:Country { name: "Country A" })-[:COUNTRY_PROVINCE]->(pv:Province)-[:PROVINCE_CITY]->(ct:City)
WITH cn, pv, collect({name : ct.name}) as cities
RETURN {coutry : {name : cn.name, province : collect( distinct { name:pv.name, city :cities }) } }

结果:

代码语言:javascript
运行
复制
{
   "coutry":{
      "name":"Country A",
      "province":[
         {
            "name":"Province A",
            "city":[
               {
                  "name":"City B"
               },
               {
                  "name":"City A"
               }
            ]
         },
         {
            "name":"Province B",
            "city":[
               {
                  "name":"City D"
               },
               {
                  "name":"City C"
               }
            ]
         }
      ]
   }
}

上面的查询使用收集()函数和分异操作符来实现所需的格式。

票数 1
EN

Stack Overflow用户

发布于 2017-08-02 05:36:51

好吧,如果你要返回路径的节点,很明显这就是你要得到的。你有几个不同的选择:

  1. 例如,查看一下apoc.convert.toTree托杰森可能会使您非常接近您想要的内容。
  2. 自己的事情自己做。从任何客户端应用程序和进程(+格式)自己发送查询结果(用Java、Python、C#、.)
  3. ..。

希望这能有所帮助。

你好,汤姆

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45452169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档