当前位置: 首页 > news >正文

图数据库查询语言 cypher 与 memgraph

Cyper

作为声明式查询语言, SQL 在计算机行业无人不晓, 无人不知. 而 Cypher 就是 Graph Database 图数据库的 SQL.

Cypher 用"圆括号"来表示节点, 用"方括号,连接线及箭头"表示关系

这样一句话 - "Sally likes Graphs. Sally is friends with John. Sally works for Neo4j."
表示为图数据库中的节点和关系

graph example

如何表示节点

圆括号表示节点, 其中节点的标签 label 可以用 "node:label" 来表示
例如:

()                  //anonymous node (no label or variable) can refer to any node in the database
(p:Person)          //using variable p and label Person
(:Technology)       //no variable, label Technology
(work:Company)      //using variable work and label Company

如何表示关系

有向图中的关系就是用箭头来表示的, Cypher 使用箭头 --><-- 来连接两个节点.
而没有箭头的连接线 -- 表示节点之间的关系是双向的

创建和查询 "Person" 与 "Technology" 之间关系的语句如下

//data stored with this direction 创建关系
CREATE (p:Person)-[:LIKES]->(t:Technology)//query relationship backwards will not return results 查询关系
MATCH (p:Person)<-[:LIKES]-(t:Technology)//better to query with undirected relationship unless sure of direction
MATCH (p:Person)-[:LIKES]-(t:Technology)

Relationship types 关系类型

关系类型可以自己定义, 推荐使用动词 (verbs and actions)
例如以下的关系类型

# 莎莉喜欢图
[:LIKES] - makes sense when we put nodes on either side of the relationship (Sally LIKES Graphs)  #  莎莉为 neo4j 工作
[:IS_FRIENDS_WITH] - makes sense when we put nodes with it (Sally IS_FRIENDS_WITH John)  # 莎莉为 neo4j 工作
[:WORKS_FOR] - makes sense with nodes (Sally WORKS_FOR Neo4j)

Relationship variables 关系变量

为查询方便, 可以给关系命名一个变量, 形如 [r][rel]

Node or relationship properties 节点与关系的属性

节点和关系的属性都可在节点的括号或关系的括号内使用花括号。然后,属性的名称和值放在花括号内。

例如

# 节点属性: p 是节点名, Person 是标签, 属性名是 name, 属性值是 Sally
Node property: (p:Person {name: 'Sally'})# 关系属性: rel 是属性名, IS_FRIENDS_WITH 是标签, 属性名是 since, 属性值是 2018
Relationship property: -[rel:IS_FRIENDS_WITH {since: 2018}]->
person graph

Cypher 中的模式

在 Cypher 中的模式可能通过以上的节点, 关系和属性放在一起来表示, 以逗号分隔.

例如我们要查询模式 "Sally likes Graph", 可以这样表示

(p:Person {name: "Sally"})-[rel:LIKES]->(g:Technology {type: "Graphs"})

通过 memgraph 为启动一个内存图数据库

  • 用 docker-compose 启动如下的 memgraph
services:memgraph:image: memgraph/memgraph-mage:latestcontainer_name: memgraph-mageports:- "7687:7687"- "7444:7444"command: ["--log-level=TRACE"]lab:image: memgraph/lab:latestcontainer_name: memgraph-labports:- "3000:3000"depends_on:- memgraphenvironment:- QUICK_CONNECT_MG_HOST=memgraph- QUICK_CONNECT_MG_PORT=7687

通过 docker-compose up -d 启动 memgraph mage 和 lab, 其中

  • memgraph/memgraph-mage - 包 Memgraph 数据库, 命令行接口 mgconsole 和 MAGE 图算法库.

  • memgraph/lab - 包含一个 web 界面 Memgraph Lab 以帮助我们探索存储在 Memgraph 中的数据

打开 http://localhost:3000/ 用如下 cypher 创建节点和关系

CREATE (:Country {name: 'Germany', language: 'German', continent: 'Europe'});
CREATE (:Country {name: 'France', language: 'French', continent: 'Europe'});MATCH (c1),(c2) WHERE c1.name= 'Germany' AND c2.name = 'France'
CREATE (c2)<-[:WORKING_IN {date_of_start: 2014}]-(p:Person {name: 'John'})-
[:LIVING_IN {date_of_start: 2014}]->(c1);MATCH (c1),(c2) WHERE c1.name= 'Germany' AND c2.name = 'France'
CREATE (c1)<-[:WORKING_IN {date_of_start: 2014}]-(p:Person {name: 'Harry'})-[:LIVING_IN {date_of_start: 2013}]->(c2);# 查询所有的节点和关系
MATCH (n)-[r]->(m) RETURN n,r,m;
graph

Reference

  • Cypher 简介
  • Neo4j Cypher Manual
  • Cypher Cheat Sheet
  • Install memgraph by docker

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • vscode附着调试
  • Day47 | 110.字符串接龙 105.有向图的完全可达性 106.岛屿的周长
  • openGuass——一般元命令
  • Vue JS执行机制和nextTick
  • Python算法工程师面试整理-微积分
  • SAP商业地产管理(RE-FX)
  • 微信小程序如何存储值
  • 集成mybatis-plus框架
  • 3.3、matlab彩色图和灰度图的二值化算法汇总
  • 如何在不格式化的情况下解锁 Android 智能手机密码
  • ue5远程渲染和本地渲染的区别,及云渲染的联系
  • 【MySQL 11】索引 (带思维导图)
  • 8.4 数据库基础技术-SQL
  • http基础原理及应用
  • 【SQL】窗口函数sum() over ( partition by xx order by xx)
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 自己简单写的 事件订阅机制
  • @jsonView过滤属性
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • Computed property XXX was assigned to but it has no setter
  • create-react-app做的留言板
  • echarts花样作死的坑
  • ESLint简单操作
  • Javascript 原型链
  • js如何打印object对象
  • overflow: hidden IE7无效
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Web标准制定过程
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 阿里云前端周刊 - 第 26 期
  • 搭建gitbook 和 访问权限认证
  • 分布式熔断降级平台aegis
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 用element的upload组件实现多图片上传和压缩
  • ​如何在iOS手机上查看应用日志
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • (0)Nginx 功能特性
  • (1)(1.9) MSP (version 4.2)
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (23)Linux的软硬连接
  • (6)设计一个TimeMap
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (规划)24届春招和25届暑假实习路线准备规划
  • (力扣)1314.矩阵区域和
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (转) Face-Resources
  • .htaccess配置常用技巧
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net 调用php,php 调用.net com组件 --