neo4j使用详解(三、cypher插入语法——最全参考)

news2024/9/21 22:26:16

在这里插入图片描述

1.插入语法

create, merge, set, delete, remove, create unique, load csv(import)

除插入语法外另外的语法详情请博主其他文章:
查询语法
其他语法

1.1.create语法

  • 创建单个节点:

    create(n) # (ID:n)

  • 创建带标签的节点:

    create (n:Person) # (ID:n, label:Person)

  • 创建带多个标签的节点:

    create (n:Person:Student:Man) # (ID:n, label:Person,Student,Man)

  • 创建带标签和属性的节点:

    create (n:Person {name:"张三",age:18}) # (ID:n, label:Person, {name:“张三”})

    • 返回创建的节点:

    create (n:Person {name:"张三",age:18}) return n

  • 创建多个节点:

    create (n:Person {name:"张三"}), (m:Person {name:"李四"}) return n, m

  • 创建节点和关系:

    create (n:Person {name:"张三"})-[r:Friend]->(m:Person {name:"李四"})

  • 创建节点和带属性的关系:

create (n:Person {name:"张三"})-[r:Friend {time:8}]->(m:Person {name:"李四"})

  • 创建关系(节点已存在):

    match (n:Person{name:“张三”}), (m:Person{name:“李四”}) create (n)-[r:Friend{time:1994}]->(m) retur r

  • 创建一个完整路径:

    create p =(n:Person {name:"张三"})-[:Friend]->(m:Person{name:"李四"})<-[:Friend]-(s:Person{name:"王五"}) return p

1.2.merge语法

是match和create的结合,可以确保模式在graph中存在(要么已经存在要么创建)。为了性能考虑,在标签和属性中创建了索引时推荐使用merge。

  • merge: 存在则匹配,不存在则创建

    merge单个节点:

    merge (n:Person) return n,labels(n)

    merge带属性的节点:

    merge (n{name:"张三",age:18}) return n

    merge带标签和属性的节点:

    merge(n:Person{name:"张三", age:18}) return n.name, n.age

    合并来自已存在节点的单个节点的属性:

    match (person:Person{name:"张三") merge (city:City{name:person.name}) return person, city

  • merge…on create: 没有则创建节点,并设置节点属性

    merge (n:Person{name:"name01"}) on create set n.created=timestamp() return n

  • merge…on match: 如果找到节点就设置属性,否则仅创建节点

    merge (n:Person{name:"张三"}) on match set person.sex="男" return n

  • merge… on create… on match: 如果找到就设置属性(on match后跟的属性),没找到创建节点并设置属性(on create后跟的属性)

    merge (n:Person{name:"张三"}) on create set n.created = timestamp() on match set n.lastSeen = timestamp() return n

  • merge关系: 匹配或者创建关系,使用MERGE去匹配或者创建关系时,必须至少指定一个绑定的节点

    merge一个关系:

    match (n:Person {name:"张三"}),(m:Person {name:"李四"}) merge (n)-[r:Friend]->(m) return r

    merge多个关系:

    match (n:Person {name:"张三"}),(m:Person {name:"李四"}) merge (n)-[:Watch]->(movie:Movie{name:"万达”,created:timestamp()})<-[:Watch]-(m) return movie

    merge非直接关系:

    match (n:Person {name:"张三"}),(m:Person {name:"李四"}) merge (n)-[r:Watch]-(m) RETURN r

  • merge的唯一性约束: 当使用的模式涉及唯一性约束时,Cypher可以通过merge来防止获取相冲突的结果

    创建索引:

    create constraint on (n:Person) assert n.name is unique
    create constraint on (n:Person) assert n.age IS unique

    如果节点未找到,使用唯一性约束创建该节点:

    merge (n:Person {name:"张三"}) return n

1.3.set语法

用于更新一个节点和关系的标签或属性(属性存在则更新,不存在则创建)

  • 更新属性:

    match (n:Person {name:"张三"}) set n.age=21 return n

  • 删除属性:

    match (n:Person {name:"张三"}) set n.age=null return n

    Neo4j不允许属性存储空值null。如果属性的值不存在,那么节点或者关系中的属性将被删除

  • 在节点和关系间复制属性:

    match (n:Person {name:"张三"}),(m:movie {created:1711093191056}) set n=m return n,m

  • 从map添加属性:

match (n:Person {name:"张三"}) set n+={age:18, sex:"男"} return n

当用map来设置属性时,可以使用+=形式的SET来只添加属性,而不删除图元素中已存在的属性

  • 设置多个属性:

match (n:Person {name:"张三"}) set n.age=21, n.sex='男' return n

  • 设置节点的标签:

match (n:Person{name:"张三"}) set n:Chinese return n

  • 节点设置多个标签:

    match (n:Person{name:"张三"}) set n:Chinese:Student return n

1.4.delete语法

用于删除节点和关系

  • 删除单个节点:

    match (n:Person) delete n

  • 删除不含关系的节点:

    match (n) where size ((n)--())=0 delete n

  • 删除节点和连接它的关系:

    match (n:Person{name:"张三" })-[r]-() delete n, r

  • 删除节点和连接它的关系(使用detach):

    match (n {name:"张三"}) detach delete n

  • 删除路径:

    match p=(d{name:"张三"})--(e{ name:"王五"}) delete p

  • 删除所有节点和关系:

    match (n) optional match (n)-[r]-() delete n,r

  • 删除所有节点和关系(使用start):

    start n=node(*) match (n)-[r]-() delete n,r

  • 删除所有节点和关系(使用detach):

    match (n) detach delete n

1.5.remove语法

用于删除图元素的属性和标签

  • 删除属性:

    match (n:Person{name:"张三"}) remove n.age return n

  • 删除标签:

    match (n:Person{name:"张三"}) remove n:Person return n

  • 删除多个标签:

    match (n:Person{name:"张三"}) remove n:Person:Student return n

  • 删除所有属性(使用set):

    match (n:Person{name:"张三"}) set n={} return n

1.6.foreach语法

foreach能够用于更新每一个path或者list中的元素,在foreach内可以使用createE创建节点

  • 为所有节点设置age属性:

    match p=(begin)-[*]->(end) where begin.name='A' and end.name='E' foreach (n in nodes(p)| set n.age=21)

1.7.create unique语法

create unique语句相当于match和create的结合体,尽可能的匹配然后创建未匹配到的

  • 创建唯一节点/关系:

    match (n{name:"name1"}) create unique (n)-[:Friend]-(e) return e

  • 创建唯一节点/关系(多关系):

    match (n{name:"name1"}) create unique (n)-[:Friend]->(e), (n)-[:Teacher]->(e) return e

1.8.load csv

用于导入csv文件,from后面接着csv的文件路径,用AS指定给变量。可以从http、https、ftp导入csv,支持gzip and deflate,其本地文件支持zip压缩, 经常和periodic commit一起使用,提交大量的数据,默认1000rows提交一次

  • 导入数据:

    load csv from 'https://neo4j.com/docs/cypher-manual/4.1/csv/artists.csv' ad line create (:Artist {name:line[1], year:toInteger(line[2])})

  • 导入带表头的数据:

    load csv with headers from 'https://neo4j.com/docs/cypher-manual/4.1/csv/artists-with-headers.csv' as line create (:Artist {name:line.Name, year:toInteger(line.Year)})

    文件artists-with-headers.csv列: Id,Name,Year

  • 导入数据并指定分隔符:

    load csv from 'https://neo4j.com/docs/cypher-manual/4.1/csv/artists-fieldterminator.csv' as line fieldterminator ';' create (:Artist { name: line[1], year: toInteger(line[2])})

  • 导入大批量数据并指定每次提交行数:

  • using periodic commit 500 load csv from 'https://neo4j.com/docs/cypher-manual/4.1/csv/artists.csv' as line create (:Artist { name: line[1], year: toInteger(line[2])})

    using periodic commit 后面接每次提交的行数,默认为1000

  • 获取导入数据的行数linenumber():

    load csv from 'https://neo4j.com/docs/cypher-manual/4.1/csv/artists.csv' as line return linenumber() as number, line

  • 获取导入文件的绝对路径:

    load csv from 'https://neo4j.com/docs/cypher-manual/4.1/csv/artists.csv' as line return distinct file() as path

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1546123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tableau项目实战-网站流量统计分析

数据介绍 网站流量分析.xlsx 1、页面指标分析 页面指标主要有网站流量指标、用户行为指标、用户浏览网站的方式等。 页面访问次数 访客完整打开网站页面进行访问的次数,访问次数是网站访问速度的衡量标准。 平均停留的时间 平均访问时长是用户访问网站的平均停留时间。 …

力扣HOT100 - 42. 接雨水

解题思路&#xff1a; 动态规划 感觉不是很好想 class Solution {public int trap(int[] height) {int n height.length;if (n 0) return 0;int[] leftMax new int[n];leftMax[0] height[0];for (int i 1; i < n; i) {leftMax[i] Math.max(leftMax[i - 1], height[i…

基于Springboot Vue医院管理系统+数据库脚本+文档(万字)

项目效果视频: 基于Springboot Vue医院管理系统 一、 项目介绍 角色&#xff1a;管理员、患者、医生 基于springboot vue实现的医院管理系统&#xff0c;有管理员、医生和患者三种角色。系统拥有丰富的功能&#xff0c;能够满足各类用户的需求&#xff0c;系统提供了登录和注册…

javaWeb学生宿舍管理系统

一、摘要 本博客介绍了如何使用Spring Boot和MySQL构建一个功能完善的JavaWeb学生宿舍管理系统。该系统分为三个角色&#xff1a;管理员、宿管和学生。管理员拥有对整个系统的全面管理权限&#xff0c;包括学生管理、宿舍管理、入住管理和管理员管理&#xff1b;宿管负责宿舍的…

线上linux服务器升级nginx

一个nginx版本空包 一个pcre文件 一个zlib文件 ./configure配置文件 make编译 make install复制所有文件到nginx 如果nginx -v无版本号 检查环境变量cat /etc/profile 编辑 环境变量vi /etc/profile 按i进入编辑模式 按esc进入查看模式 因为path中并未使用%JAVA_HOME%字样…

QMT量化交易上手

文章目录 QMT介绍基本使用代码初始化股票和行情交易量化策略示例相关链接QMT介绍 QMT是迅投公司出品量化交易客户端软件,目前只能运行在windows机器上,分为QMT 和 miniQMT两种模式,后者可以采用python API做程序化交易,极大方便了广大散户。这点上比同花顺/通信达好很多。…

在 IntelliJ IDEA 中使用 Terminal 执行 git log 命令后的退出方法

前言 IntelliJ IDEA 是一款广受欢迎的集成开发环境&#xff0c;它内置了强大的终端工具&#xff0c;使得开发者无需离开IDE就能便捷地执行各种命令行操作&#xff0c;包括使用 Git 进行版本控制。在 IDEA 的 Terminal 中执行 git log 命令时&#xff0c;由于该命令会显示项目的…

微信登录开发

1、h5页面增加一个微信登录&#xff0c;省去手机号验证码登录的繁琐。 首先需要开通服务号&#xff0c;我用的是公司的服务号&#xff0c;开发的小伙伴可以去找领导开通。开通后把自己的微信号加进去就可以进行下面的步骤了。 在微信开发者平台上的公众号设置中去设置业务域名、…

四、C语言中的数组:二维数组

四、C语言中的数组&#xff1a;二维数组 本章的学习内容如下&#xff1a; 四、C语言中的数组&#xff1a;数组的创建与初始化 四、C语言中的数组&#xff1a;数组的输入与元素个数 C语言—第6次作业—十道代码题掌握一维数组 四、C语言中的数组&#xff1a;二维数组 我们可以…

力扣刷题44-46(力扣0062/0152/0198)

62. 不同路径 题目描述&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff0c;机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路径&#xff1f; 思路&#xff1a; 其实就是问(0,0)->(m-1,n-1)一共有几条路。 第一个…

30岁失业的我,选择职场转型,进入AIGC工程师领域,重新开始

去年&#xff0c;刚满30岁的我又一次被公司辞退了&#xff0c;由于学历不高&#xff0c;简历也不出彩&#xff0c;尽管半个月来投了一份又一份的简历&#xff0c;但仍然是石沉大海&#xff0c;我终于不得不开始思考一个以前被我一直刻意压制的想法——职场转型。 尽管知道这条…

docker (一)

1&#xff0c;什么是docker 首先我们可以好好的看看docker的那个可能的图标&#xff0c;你想象到了什么&#xff1f; ... docker是一个开源的应用容器引擎&#xff0c;有Docker公司&#xff08;前dotCloud公司&#xff09;开发&#xff0c;基于Apache2.0开源授权协议发行。该…

碳实践|企业组织碳排放源识别方法、案例分析,及注意事项

在上一章中讲到“界、源、算、质、查”五步法实现企业组织碳的完整核算流程&#xff0c;本章将针对其中的“源”- “识别排放源”这一步骤来展开,主要分析其识别方法、实操案例&#xff0c;并列举注意事项。 企业识别碳排放源是指在组织边界内找到产生碳排放的设施&#xff0c;…

算法沉淀 —— 动态规划篇(路径问题)

算法沉淀 —— 动态规划篇&#xff08;路径问题&#xff09; 前言一、不同路径1二、珠宝的最高价值三、下降路径最小和四、地下城游戏 前言 几乎所有的动态规划问题大致可分为以下5个步骤&#xff0c;后续所有问题分析都将基于此 1.、状态表示&#xff1a;通常状态表示分为以下…

登录校验解决方案JWT

目录 &#x1f397;️1.JWT介绍 &#x1f39e;️2.应用场景 &#x1f39f;️3.结构组成 &#x1f3ab;4.JWT优点 &#x1f3a0;5.封装成通用方法 &#x1f6dd;6.JWT自动刷新 1.JWT介绍 官网&#xff1a;JWT官网 JSON Web Token (JWT) 是一个开放标准&#xff0c;它…

C语言:编译与链接

目录 前言1. 翻译环境与运行环境2.翻译环境&#xff1a;预编译编译汇编链接3. 运行环境 前言 我们写一个程序&#xff0c;例如test.c或是test.h这些源文件&#xff0c;头文件&#xff0c;事实上这些代码都是文本文件&#xff0c;但是计算机能够看得懂&#xff0c;并且直接执行…

C#代码混淆器 ipaguard 的优势与使用

摘要 本文探讨了iOS开发的优势、费用以及软件开发方面的相关内容。通过分析iOS开发所采用的编程语言、开发环境、用户界面设计、应用审核流程以及应用领域等方面&#xff0c;展示了iOS开发的诸多优势和特点。虽然iOS开发具有高用户体验、统一的硬件和软件环境、良好的市场份额等…

uni-app中web-view的使用

1. uni-app中web-view的使用 uni-app中的web-view是一个 web 浏览器组件&#xff0c;可以用来承载网页的容器&#xff0c;uni-app开发的app与web-view实现交互的方式相关简单&#xff0c;应用通过属性message绑定触发事件&#xff0c;然后在web-view的网页向应用 postMessage 触…

博途PLC 系统时间读取写入功能块

系统时间数据类型属于DTL数据类型,DTL本身是结构变量,有时、分、秒、纳秒。利用纳秒寄存器可以实现伪随机数发生器,伪随机数发生器详细代码介绍请参考下面文章链接: 1、伪随机数 https://rxxw-control.blog.csdn.net/article/details/122157365https://rxxw-control.blog…

电脑桌面记事本便签软件,记事本软件哪个好

在这个快节奏的生活中&#xff0c;我们每个人都需要一个得力的助手来帮助我们管理琐碎的事务。作为一名忙碌的职场人士&#xff0c;你是否经常因为忘记重要事项而感到焦虑&#xff1f;是否因为繁杂的待办事项而感到无从下手&#xff1f;今天&#xff0c;我要向你推荐的这款电脑…