首页 > 数据库 >neo4j图数据库

neo4j图数据库

时间:2023-11-09 17:44:33浏览次数:40  
标签:name err 数据库 neo4j 节点 MATCH CREATE

目录

neo4j说明

	Neo4j是一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。在Neo4j中,数据以图(网络)的形式而非传统的表的形式进行存储。这种图模型中,数据以节点(顶点)和边的方式表示,节点可以表示实体,而边则表示这些实体之间的各种关系。

这种数据模型的主要优点在于其快速解决复杂关系问题的能力。在Neo4j中,底层数据存储专门针对图形数据的特点进行了优化,因此在处理关系数据方面比其他数据库有更高的性能。另外,由于Neo4j没有表结构的概念,程序员可以在一个面向对象的、灵活的网络结构下工作,而非严格、静态的表结构,因此它比SQL更灵活。

Neo4j因其嵌入式、高性能、轻量级等优势,越来越受到关注。

docker-compose安装

version: '3'
services:
  neo4j:
    image: neo4j:4.4.27
    ports:
      - 7474:7474
      - 7687:7687
    volumes:
      - ./data:/data
      - ./logs:/logs
    environment:
      - NEO4J_AUTH=neo4j/123456

本地访问:http://127.0.0.1:7474/

命令

创建节点

//创建节点
CREATE (node:Label {property: value})
eg:
CREATE (us:country {name: "美国"});
CREATE (ch:country {name: "中国"});
CREATE (sichuan:area {name: "四川省"});
CREATE (jiangsu:area {name: "江苏省"});
CREATE (henan:area {name: "河南省"});
CREATE (hubei:area {name: "湖北省"});
CREATE (shanghai:city {name: "上海市"});
CREATE (beijing:city {name: "北京市"});

a:Person :标签-->a属于Person标签
b:Person :标签-->b属于Person标签

//创建带有多个标签和属性的节点
CREATE (node:Label1:Label2 {property1: value1, property2: value2})
eg:
CREATE (a:Person:Person2 {name: "jeffTest",age:18});
CREATE (a:Person:Person2 {name: "jeffTest",age:18})

创建节点关系

//创建节点关系
MATCH (node1:Label1),(node2:Label2)
CREATE (node1)-[:RELATIONSHIP_TYPE]->(node2)

eg:
//北京市属于中国关系
MATCH (n:city {name: "北京市"})
MATCH (ch:country {name: "中国"})
CREATE (n)-[:属于]->(ch);

//上海市属于中国关系
MATCH (n:city {name: "上海市"})
MATCH (ch:country {name: "中国"})
CREATE (n)-[:属于]->(ch);

//带有area标签的全部属于ch:country标签
MATCH (n:area)
MATCH (ch:country {name: "中国"})
CREATE (n)-[:属于]->(ch)


创建节点并建立关系

//创建节点并建立关系
CREATE (bazhong:city {name: "巴中市"})
MATCH (n:city {name: "巴中市"}),(ch:country {name: "中国"})
CREATE (n)-[:属于]->(ch)


//创建节点并建立关系
CREATE (kunshan:city {name: "昆山市"});
MATCH (n:city {name: "昆山市"}),(k:area {name: "江苏省"})
CREATE (n)-[:属于]->(k)

更新节点和关系

//更新节点属性
MATCH (n:city {name: "巴中市"})
SET n.peopNum = "200万"


//更新关系属性
MATCH (n:city {name: "巴中市"})-[r:属于]->(k:city {name: "上海市"})
MATCH (y:area {name: "四川省"})
DELETE r
CREATE (n)-[:属于]->(y)

查询节点和关系

//查询所有节点和关系
MATCH (node)
RETURN node

//查询满足条件的节点
MATCH (node:city)
WHERE node.name = "北京市"
RETURN node

//查询节点关系
MATCH (node1)-[relationship:属于]->(node2)
RETURN node1, relationship, node2

//查询满足条件的节点关系
MATCH (n:city)-[:属于]->(k:area)-[:属于]->(j:country)
WHERE n.name = "安阳市"
RETURN n, k,j
//查询满足条件的节点关系2
MATCH (n:city {name:"安阳市"})-[:属于]->(k:area)-[:属于]->(j:country)
RETURN n, k,j

删除节点及关系

//删除节点及关机
MATCH (n:city {name: "巴中市"})
OPTIONAL MATCH (ch:country {name: "中国"})-[relationship]-()
DELETE n, relationship

//删除节点关系
MATCH (n:city {name: "巴中市"})-[relationship]-()
DELETE relationship

//删除节点
MATCH (n:city {name: "新乡市"})
DELETE n

//删除所有节点关系
MATCH ()-[r]-() DELETE r  // 匹配所有节点之间的关系
//删除所有节点
MATCH (n)  DELETE n

golang执行cypher命令--创建节点

package main

import (
	"fmt"
	"github.com/neo4j/neo4j-go-driver/v4/neo4j"
)

func main() {
	config := func(conf *neo4j.Config) {
		//conf.Encrypted = false                         // 启用 TLS
		//conf.TLSCertFile = "/path/to/certificate.crt" // 设置 TLS 证书文件路径
		//conf.TLSKeyFile = "/path/to/private.key"      // 设置 TLS 私钥文件路径
		//conf.TLSCAFile = "/path/to/ca.crt"            // 设置 TLS CA 证书文件路径
	}

	// 创建驱动程序
	driver, err := neo4j.NewDriver("bolt://localhost:7687", neo4j.BasicAuth("neo4j", "123456", ""), config)
	if err != nil {
		// 处理错误
	}
	defer driver.Close()
	session := driver.NewSession(neo4j.SessionConfig{})
	defer session.Close()
	
  //命令
	cyhperStr := `
MATCH (n:city {name: "巴中市"})-[r:属于]->(sichuan:area {name: "四川省"})
MATCH (shanghai:city {name: "上海市"})
DELETE r
CREATE (n)-[:属于]->(shanghai)
`

	result, err := session.WriteTransaction(func(tx neo4j.Transaction) (interface{}, error) {

		result, err := tx.Run(cyhperStr, nil)
		if err != nil {
			return nil, err
		}

		return result, nil
	})
	if err != nil {
		// 处理错误
		fmt.Println("err:", err)
		return
	}
	fmt.Println(result)
}

golang执行cypher命令2--创建节点+建立关系

package main

import (
	"fmt"
	"github.com/neo4j/neo4j-go-driver/v4/neo4j"
)

func main() {
	config := func(conf *neo4j.Config) {
		//conf.Encrypted = false                         // 启用 TLS
		//conf.TLSCertFile = "/path/to/certificate.crt" // 设置 TLS 证书文件路径
		//conf.TLSKeyFile = "/path/to/private.key"      // 设置 TLS 私钥文件路径
		//conf.TLSCAFile = "/path/to/ca.crt"            // 设置 TLS CA 证书文件路径
	}

	// 创建驱动程序
	driver, err := neo4j.NewDriver("bolt://localhost:7687", neo4j.BasicAuth("neo4j", "123456", ""), config)
	if err != nil {
		// 处理错误
	}
	defer driver.Close()
	session := driver.NewSession(neo4j.SessionConfig{})
	defer session.Close()

	cyhperStr := `CREATE (n:city {name: $name})` //创建节点
	//建立关系
	cyhperStr2 := `MATCH (n:city {name: $name}),(k:area {name: "河南省"})
CREATE (n)-[:属于]->(k)`
	nameList := []string{"郑州市", "洛阳市", "开封市", "新乡市", "平顶山市", "焦作市", "安阳市", "鹤壁市", "漯河市", "南阳市", "信阳市", "周口市", "商丘市", "许昌市", "三门峡市", "驻马店市", "濮阳市"}

	for _, name := range nameList {
		//创建节点
		_, err := session.WriteTransaction(func(tx neo4j.Transaction) (interface{}, error) {
			result, err := tx.Run(cyhperStr, map[string]interface{}{
				"name": name,
			})
			if err != nil {
				return nil, err
			}

			return result, nil
		})
		if err != nil {
			// 处理错误
			fmt.Println("err:", err)
			return
		}

		//建立关系
		_, err = session.WriteTransaction(func(tx neo4j.Transaction) (interface{}, error) {
			result, err := tx.Run(cyhperStr2, map[string]interface{}{
				"name": name,
			})
			if err != nil {
				return nil, err
			}

			return result, nil
		})
		if err != nil {
			// 处理错误
			fmt.Println("err:", err)
			return
		}
	}
}

标签:name,err,数据库,neo4j,节点,MATCH,CREATE
From: https://www.cnblogs.com/guyouyin123/p/17822406.html

相关文章

  • C# EntityFramework+SQLite CodeFirst 创建数据库和数据表
    1、安装NuGet包System.Data.SQLite(System.Data.SQLite.Core、System.Data.SQLite.EF6、System.Data.SQLite.Linq)SQLite.CodeFirstEntityFramework2、配置App.config<?xmlversion="1.0"encoding="utf-8"?><configuration><configSe......
  • 大型数据库实验三
    实验三--熟悉常用的HBase操作1、列出HBase所有表的信息,例如表名2、在终端打印出指定的表的所有的就数据3、向已经创建好的表中添加或者删除指定的列族或列添加数据:删除数据:4、清空指定的表的所有的数据5、统计表的行数6、将下面的关系数据库,转换为合适的hbase格......
  • C#winform学习3(C#连接MySQL数据库)
    需要引用MySQL.data.dll文件1.右键引用,如果没有MySQL.data.dll文件则选择浏览一般这个文件会存放在C:\ProgramFiles(x86)\MySQL\ConnectorNET8.0\Assemblies如果没有,需要去官网自己下载即可,参考:visualstudio2019使用MySQL.data的引用-知乎(zhihu.com)官网下载地址:MySQ......
  • 数据库数据恢复—MySQL数据库(无备份,未开启binlog)误删除表数据怎么恢复数据?
    数据库数据恢复环境:一台本地windowssever操作系统服务器,服务器上部署mysql数据库单实例,引擎类型为innodb,表内数据存储所使用表空间类型为独立表空间。无数据库备份,未开启binlog。数据库故障&分析:工作人员在执行Delete命令删除数据时未添加where子句进行筛选,导致全表数据被删除,......
  • 大型数据库实验1
    实验环境:linux,Hadoop3.3.0实验内容与完成情况:1.熟悉常用的Linux操作1)cd命令:切换目录(1) 切换到目录“/usr/local”(2) 切换到当前目录的上一级目录(3) 切换到当前登录Linux系统的用户的自己的主文件夹 2)ls命令:查看文件与目录查看目录“/usr”下的所有文件和目录 ......
  • indexDB数据库快速入门
    indexDB简介indexDB本质上就是存储数据,优点不受大小限制,当数据大于>5MB时我们无法通过localStorage、cookie(只能存4k)存储//连接数据库(连接的过程是一个异步的)window.indexedDB.open('库名称','库版本号')>=0constrequest=window.indexedDB.open('......
  • Python中使用sqlalchemy操作数据库遇到密码包含@的处理方法
    欺骗性的oracle12514错误,这就有问题了,努力方向就不对了。。。密码包含@的处理方法使用sqlalchemy操作数据库的时候,遇到密码中包含@的时候会报错。因为它是通过@来链接IP地址的,遇到密码里有@就跟语法里的@混乱分不清了。编辑器就会报错。比如下面这个例子:用户名:XXXXX密码:1......
  • 数据库(Oracle)序列(Sequence)的基本使用
    1.Sequence定义在Oracle中可以用SEQUENCE生成自增字段。Sequence序列是Oracle中用于生成数字序列的对象,可以创建一个唯一的数字作为主键。2.为什么要用Sequence你可能有疑问为什么要使用序列?不能使用一个存储主键的表并每次递增吗?或者将列设置为AUTOINCREMENT?如果使用一......
  • 从 SQL 查询优化技巧去看 h2 数据库查询原理 | 京东物流技术团队
    本文目标是:了解查询的核心原理,对比SQL查询优化技巧在h2database中的落地实现。前提:为了贴近实际应用,本文CodeInsight基于BTree存储引擎。数据查询核心原理数据库实现查询的原理:遍历表/索引,判断是否满足where筛选条件,添加到结果集。简单通用。对于选择表还是索引、如何遍历......
  • linux/docker 版 Sql Server新建的数据库插入中文乱码问题解决方案
    SqlServer插入遇到乱码原因:在英文系统中,SqlServer默认排序规则为英文字典顺序解决方案一:容器版SqlServer,在创建容器时,可以加上环境变量-eMSSQL_COLLATION=Chinese_PRC_CI_AS-eTZ=Asia/Shanghai 把排序规则设为中文字典顺序并忽略大小写区分重音,时区设置为上海,不然......