Neo4j Cypher 复杂查询详解在之Unwind

本文详细解析了Cypher查询中的collect、UNWIND、WITH、DISTINCT等关键字的功能与用法,并通过实例展示了如何利用这些关键字在Neo4J中创建节点集合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 拆解collect

UNWIND[1,2,3] AS x
RETURN x

代码块解释:

Result
x
1
2
3

2. collect去重

类似hive里面的distinct关键字

WITH [1,1,2,2] AS coll UNWIND coll AS x
WITH DISTINCT x
RETURN collect(x) AS SET

代码块解释:返回的是一个set:[1,2]

3. 利用collection的参数创建nodes

collection的参数示例如下,其实就是个json:

{
  "events" : [ {
    "year" : 2014,
    "id" : 1
  }, {
    "year" : 2014,
    "id" : 2
  } ]
}

查询语句:

UNWIND { events } AS event
MERGE (y:Year { year:event.year })
MERGE (y)<-[:IN]-(e:Event { id:event.id })
RETURN e.id AS x
ORDER BY x

代码块解释:在Neo4J Cypher里面需要用到参数化输入(参见neo4j Parameters),上面语句在cypher里面应该输入如下:

:POST /db/data/transaction/commit
{
  "statements": [
    {
      "statement": "UNWIND { events } AS event MERGE (y:Year { year:event.year }) MERGE (y)<-[:IN]-(e:Event { id:event.id }) RETURN e.id AS x ORDER BY x",
      "parameters":{
                   "events" : [ {
                        "year" : 2014,
                        "id" : 1
                      }, {
                        "year" : 2014,
                        "id" : 2
                      } ]
                    }
            }
      ]
}

最后结果返回如下:

{
  "results": [
    {
      "columns": [
        "x"
      ],
      "data": [
        {
          "row": [
            1
          ]
        },
        {
          "row": [
            2
          ]
        }
      ]
    }
  ],
  "errors": []
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值