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

在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

垃圾回收:垃圾回收器

目录 垃圾回收器 评估GC的性能指标 7种典型的垃圾回收器 Serial回收器&#xff1a;串行回收 ParNew回收器&#xff1a;并行回收 Parallel回收器&#xff1a;吞吐量优先 CMS回收器&#xff1a;低延迟 G1回收器&#xff1a;区域化分代式 G1回收过程1-年轻代GC G1回收过程…

人、机中的幻觉和直觉

对于人类而言&#xff0c;幻觉和直觉是两种不同的心理现象。幻觉是一种错误的感知或体验&#xff0c;而直觉是一种在没有明显依据的情况下产生的直观认知。这两种概念在心理学和认知科学中具有不同的意义和研究对象。 人类幻觉是指个体在感知或体验上出现的错误&#xff0c;即看…

攻防世界-baby_web

题目信息 相关知识 使用bp进行抓包 解题过程 题目界面如下所示: 试图找index界面&#xff1a; 发现又跳转到http://61.147.171.105:51201/1.php页面&#xff0c;因此说明61.147.171.105:51201/index.php是存在的&#xff08;因为笔者试了&#xff0c;不存在的页面会直接报…

SHAP和LIME:Python机器学习模型解释

SHAP和LIME&#xff1a;Python机器学习模型解释 为了更好地展示&#xff0c;示例代码参见和鲸社区&#xff0c;一键运行 简介 机器学习模型在各个领域得到广泛应用&#xff0c;但其黑盒性质往往使人难以理解其决策过程&#xff0c;降低了模型的可信度和可靠性。为了解决这一…

ROM-IP

1.原理 通过添加数据文件&#xff0c;使ROM看起来不是易失性存储器&#xff0c; 产生256个数据&#xff0c;每个数据的位宽是8 如果前面为x&#xff0c;后面就是x256-1 2.单端口ROM配置 FPGA内部没有非易失性存储器。调用的ROM和RAM都是用RAM来生成的 3.双端口ROM配置 使用第一…

React系列之虚拟DOM、FIBER和DIFF算法

文章目录 虚拟 DOM 和 DIFF 算法虚拟DOM虚拟DOM对象虚拟DOM的优势预防XSS DIFF算法旧的DIFF算法Fiber树渲染过程算法过程key 的作用 虚拟 DOM 和 DIFF 算法 虚拟DOM React使用虚拟DOM来更新真正的DOM。 DOM表示“文档对象模型”&#xff0c;浏览器遵循HTML指令来构造文档对象…

Temu api接口 获取商品详情 数据采集

iDataRiver平台 https://www.idatariver.com/zh-cn/ 提供开箱即用的Temu电商数据采集API&#xff0c;供用户按需调用。 接口使用详情请参考Temu接口文档 接口列表 1. 获取商品详情 参数类型是否必填默认值示例值描述apikeystring是idr_***从控制台里复制apikeycountrystrin…

一文看懂什么是OpenHarmony流转架构

随着全场景多设备的生活方式不断深入&#xff0c;用户拥有的设备越来越多&#xff0c;不同设备都能在适合的场景下提供良好的体验&#xff0c;例如手表可以提供及时的信息查看能力&#xff0c;电视可以带来沉浸的观影体验。但是&#xff0c;每个设备也有使用场景的局限&#xf…

四川思维跳动商务信息咨询有限公司抖音电商的领航者

在数字化浪潮席卷全球的今天&#xff0c;电商行业正以其独特的魅力改变着传统的商业模式。作为这一变革的先锋力量&#xff0c;四川思维跳动商务信息咨询有限公司&#xff08;以下简称“思维跳动”&#xff09;凭借其深厚的行业经验和创新思维&#xff0c;专注于抖音电商服务&a…

如何保障MySQL和Redis的数据一致性?

在满足实时性的条件下&#xff0c;不存在两者完全保存一致的方案&#xff0c;只有最终一致性方案。 根据网上的众多解决方案&#xff0c;总结出 6 种&#xff0c;直接看目录&#xff1a; 不好的方案 1. 先写 MySQL&#xff0c;再写 Redis 图解说明&#xff1a; 这是一副时序图…

C++ STL - vector使用详解

目录 0.引言 1.构造函数 2. 赋值函数 3. vector 容量与大小 4. vector 插入和删除 5. vector 元素访问与更改 6. vector 互换 9. vector 预留空间 0.引言 这篇博客将详细介绍 vector&#xff0c;由于总体上与上一篇介绍的 string 类似&#xff0c;在此处注意展示其…

【Python】Data Science with Python 数据科学(1)环境搭建

一、操作系统 使用运行在Windows11主机上的Ubuntu 22.04虚拟机&#xff0c;虚拟化平台为Oracle VM VirtualBox。 二、PyCharm安装 有关PyCharm的安装和快捷方式创建&#xff0c;可分别参考我的博客 Ubuntu安装PyCharm、Ubuntu创建桌面快捷方式 &#xff0c;以及Ubuntu创建桌…

Vue2(十一):全局事件总线、消息订阅与发布pubsub、TodoList的编辑功能、$nextTick、过渡与动画

一、全局事件总线 1、思路解析 一种组件间通信的方式&#xff0c;适用于任意组件间通信。通俗理解就是一个定义在所有组件之外的公共x&#xff0c;这个x可以有vm或vc上的同款$on、$off、$emit&#xff0c;也可以让所有组件都访问到。 第一个问题&#xff1a;那怎样添加这个x才…

GPU-CPU-ARM-X86-RISC-CUDA

CPU更适合处理复杂逻辑运算和单线程任务&#xff0c;而GPU则更适合处理大规模并行计算任务。 CPU&#xff08;中央处理器&#xff09;通常具有较少的核心数量&#xff08;一般在2到16个之间&#xff09;&#xff0c;但每个核心的性能较强&#xff0c;擅长执行复杂的运算和逻辑…

SpringCloud Alibaba实战和源码(8)OpenFeign使用

1、 使用Feign实现远程HTTP调用 1.1、常见HTTP客户端 HttpClient HttpClient 是 Apache Jakarta Common 下的子项目&#xff0c;用来提供高效的、最新的、功能丰富的支持 Http 协 议的客户端编程工具包&#xff0c;并且它支持 HTTP 协议最新版本和建议。HttpClient 相比传统 J…

Postman核心功能解析-参数化和测试报告

一、参数化处理 参数化&#xff1a;针对于某一个接口&#xff0c;有大量的的测试数据需要批量验证&#xff0c;一个一个的更改请求参数太耗时耗力&#xff0c;使用参数化批量处理数据会比较高效&#xff0c;常规通过文档参数化实现。 创建文件 格式CSV 文件内第一行信息 需要…

【YOLOv8代码详解】各个任务Loss损失函数梳理

YOLOv8官方将各类任务&#xff08;目标检测&#xff0c;关键点检测&#xff0c;实例分割&#xff0c;旋转目标框检测&#xff0c;图像分类&#xff09;的损失函数封装了在ultralytics\utils\loss.py中&#xff0c;本文主要梳理一下各类任务Loss的大致组成&#xff0c;不涉及到具…

封装-练习

T2、以面向对象的思想&#xff0c;编写自定义类描述IT从业者。设定属性包括&#xff1a;姓名&#xff0c;年龄&#xff0c;技术方向&#xff0c;工作年限&#xff1b;方法包括&#xff1a;工作。 要求&#xff1a; 设置属性的私有访问权限&#xff0c;通过公有的get,set方法实现…

第2章 辐射度、光度和色度学基本理论

一、前言 辐射度学&#xff08;radiology&#xff09;是一门以整个电磁波段&#xff08;electromagnetic band&#xff09;的电磁辐射能&#xff08;electromagnetic radiation energy&#xff09;测量为研究对象的科学。计算机图形学中涉及的辐射度学&#xff0c;则集中于整个…