一.ArangoDB基本单元
1.Collections
Collections相当于传统数据库的表,Collections有两种类型(不要和数据document混淆)
(1)document collection图的节点
(2)edge collection图的边
和document类型相比,多出_from和_to属性,表示两个document之间的联系,换句话说就是:
document collection的两个节点documents,通过edge collection边document来相连。
2.document文档
document 相当于传统数据库每一行数据,JSON格式,并自带3个属性,_key,_id,_rev
比如

{"_key": "2861650", //每个document的唯一标识,用于在collection集合中标识它,如果不设置的话会自动分配"_id": "Characters/2861650", //用于在database数据库中标识文档"_rev": "_V1bzsXa---", //对document的修订版本"name": "Ned","surname": "Stark","alive": true,"age": 41,"traits": ["A","H","C","N","P"]
},

二.AQL语句使用
1.查询document
通过_key获取

RETURN DOCUMENT("Characters", "2861650")

通过_id获取

RETURN DOCUMENT("Characters/2861650")

获取所有表中所有数据

FOR c IN CharactersRETURN c

条件查询

FOR c IN CharactersFILTER c.name == "Ned"RETURN c
FOR c IN CharactersFILTER c.name == "Ned"RETURN c.age
FOR c IN CharactersFILTER c.age < 13 AND c.age != nullRETURN { name: c.name, age: c.age }
FOR c IN CharactersFILTER c.age < 13 AND c.age != nullRETURN { name: c.name, age: c.age }

限制查询的条数

FOR c IN CharactersLIMIT 5RETURN c.name

排序
此语句是先对name进行了排序,然后再进行Limit 10

FOR c IN CharactersSORT c.nameLIMIT 10   RETURN c.name

2.插入ducument
单条document数据插入

INSERT {"name": "Robert","surname": "Baratheon","alive": false,"traits": ["A","H","C"]
} INTO Characters

多条document数据插入

LET data = [{ "name": "Robert", "surname": "Baratheon", "alive": false, "traits": ["A","H","C"] },{ "name": "Jaime", "surname": "Lannister", "alive": true, "age": 36, "traits": ["A","F","B"] },{ "name": "Catelyn", "surname": "Stark", "alive": false, "age": 40, "traits": ["D","H","C"] },{ "name": "Cersei", "surname": "Lannister", "alive": true, "age": 36, "traits": ["H","E","F"] },{ "name": "Daenerys", "surname": "Targaryen", "alive": true, "age": 16, "traits": ["D","H","C"] },{ "name": "Jorah", "surname": "Mormont", "alive": false, "traits": ["A","B","C","F"] },{ "name": "Petyr", "surname": "Baelish", "alive": false, "traits": ["E","G","F"] },{ "name": "Viserys", "surname": "Targaryen", "alive": false, "traits": ["O","L","N"] },{ "name": "Jon", "surname": "Snow", "alive": true, "age": 16, "traits": ["A","B","C","F"] },{ "name": "Sansa", "surname": "Stark", "alive": true, "age": 13, "traits": ["D","I","J"] },{ "name": "Arya", "surname": "Stark", "alive": true, "age": 11, "traits": ["C","K","L"] },{ "name": "Robb", "surname": "Stark", "alive": false, "traits": ["A","B","C","K"] },{ "name": "Theon", "surname": "Greyjoy", "alive": true, "age": 16, "traits": ["E","R","K"] },{ "name": "Bran", "surname": "Stark", "alive": true, "age": 10, "traits": ["L","J"] },{ "name": "Joffrey", "surname": "Baratheon", "alive": false, "age": 19, "traits": ["I","L","O"] },{ "name": "Sandor", "surname": "Clegane", "alive": true, "traits": ["A","P","K","F"] },{ "name": "Tyrion", "surname": "Lannister", "alive": true, "age": 32, "traits": ["F","K","M","N"] },{ "name": "Khal", "surname": "Drogo", "alive": false, "traits": ["A","C","O","P"] },{ "name": "Tywin", "surname": "Lannister", "alive": false, "traits": ["O","M","H","F"] },{ "name": "Davos", "surname": "Seaworth", "alive": true, "age": 49, "traits": ["C","K","P","F"] },{ "name": "Samwell", "surname": "Tarly", "alive": true, "age": 17, "traits": ["C","L","I"] },{ "name": "Stannis", "surname": "Baratheon", "alive": false, "traits": ["H","O","P","M"] },{ "name": "Melisandre", "alive": true, "traits": ["G","E","H"] },{ "name": "Margaery", "surname": "Tyrell", "alive": false, "traits": ["M","D","B"] },{ "name": "Jeor", "surname": "Mormont", "alive": false, "traits": ["C","H","M","P"] },{ "name": "Bronn", "alive": true, "traits": ["K","E","C"] },{ "name": "Varys", "alive": true, "traits": ["M","F","N","E"] },{ "name": "Shae", "alive": false, "traits": ["M","D","G"] },{ "name": "Talisa", "surname": "Maegyr", "alive": false, "traits": ["D","C","B"] },{ "name": "Gendry", "alive": false, "traits": ["K","C","A"] },{ "name": "Ygritte", "alive": false, "traits": ["A","P","K"] },{ "name": "Tormund", "surname": "Giantsbane", "alive": true, "traits": ["C","P","A","I"] },{ "name": "Gilly", "alive": true, "traits": ["L","J"] },{ "name": "Brienne", "surname": "Tarth", "alive": true, "age": 32, "traits": ["P","C","A","K"] },{ "name": "Ramsay", "surname": "Bolton", "alive": true, "traits": ["E","O","G","A"] },{ "name": "Ellaria", "surname": "Sand", "alive": true, "traits": ["P","O","A","E"] },{ "name": "Daario", "surname": "Naharis", "alive": true, "traits": ["K","P","A"] },{ "name": "Missandei", "alive": true, "traits": ["D","L","C","M"] },{ "name": "Tommen", "surname": "Baratheon", "alive": true, "traits": ["I","L","B"] },{ "name": "Jaqen", "surname": "H'ghar", "alive": true, "traits": ["H","F","K"] },{ "name": "Roose", "surname": "Bolton", "alive": true, "traits": ["H","E","F","A"] },{ "name": "The High Sparrow", "alive": true, "traits": ["H","M","F","O"] }
]FOR d IN dataINSERT d INTO Characters

3.更新和替换document
更新,根据_key

UPDATE "2861650" WITH { alive: false } IN Characters

替换

REPLACE "2861650" WITH {name: "Ned",surname: "Stark",alive: false,age: 41,traits: ["A","H","C","N","P"]
} IN Characters

新增属性

FOR c IN CharactersUPDATE c WITH { season: 1 } IN Characters

4.删除document
单条删除

REMOVE "2861650" IN Characters

批量删除

FOR c IN CharactersREMOVE c IN Characters

5.MERGE(),collection之间的document关联
假如现在让Characters的traits字段和Traits中的数据相关联
创建collection集合 Traits
然后再导入数据

LET data =[{ "_key": "A", "en": "strong", "de": "stark" },{ "_key": "B", "en": "polite", "de": "freundlich" },{ "_key": "C", "en": "loyal", "de": "loyal" },{ "_key": "D", "en": "beautiful", "de": "schön" },{ "_key": "E", "en": "sneaky", "de": "hinterlistig" },{ "_key": "F", "en": "experienced", "de": "erfahren" },{ "_key": "G", "en": "corrupt", "de": "korrupt" },{ "_key": "H", "en": "powerful", "de": "einflussreich" },{ "_key": "I", "en": "naive", "de": "naiv" },{ "_key": "J", "en": "unmarried", "de": "unverheiratet" },{ "_key": "K", "en": "skillful", "de": "geschickt" },{ "_key": "L", "en": "young", "de": "jung" },{ "_key": "M", "en": "smart", "de": "klug" },{ "_key": "N", "en": "rational", "de": "rational" },{ "_key": "O", "en": "ruthless", "de": "skrupellos" },{ "_key": "P", "en": "brave", "de": "mutig" },{ "_key": "Q", "en": "mighty", "de": "mächtig" },{ "_key": "R", "en": "weak", "de": "schwach" }
]for d in dataINSERT d INTO Traits

只关注traits字段和只拿en关联

FOR c IN CharactersRETURN MERGE(c, { traits: DOCUMENT("Traits", c.traits)[*].en })

结果

{"_id": "Characters/7839","_key": "7839","_rev": "_YFmCBwS--_","alive": false,"name": "Robert","surname": "Baratheon","traits": ["strong","powerful","loyal"]}

traits字段和en,de关联

FOR c IN CharactersRETURN MERGE(c, { traits: (for t in DOCUMENT("Traits", c.traits) RETURN {en:t.en,de:t.de})} )

结果

{"_id": "Characters/7839","_key": "7839","_rev": "_YFmCBwS--_","alive": false,"name": "Robert","surname": "Baratheon","traits": [{"en": "strong","de": "stark"},{"en": "powerful","de": "einflussreich"},{"en": "loyal","de": "loyal"}]
}

6.图的建立
比如父母和孩子之间有以下关系:

首先创建ChildOf的新集合,集合类型为Edge document
Edge的_from和_to的内容必须为document的_id,运行一下代码,生成图关系

LET data = [{"parent": { "name": "Ned", "surname": "Stark" },"child": { "name": "Robb", "surname": "Stark" }}, {"parent": { "name": "Ned", "surname": "Stark" },"child": { "name": "Sansa", "surname": "Stark" }}, {"parent": { "name": "Ned", "surname": "Stark" },"child": { "name": "Arya", "surname": "Stark" }}, {"parent": { "name": "Ned", "surname": "Stark" },"child": { "name": "Bran", "surname": "Stark" }}, {"parent": { "name": "Catelyn", "surname": "Stark" },"child": { "name": "Robb", "surname": "Stark" }}, {"parent": { "name": "Catelyn", "surname": "Stark" },"child": { "name": "Sansa", "surname": "Stark" }}, {"parent": { "name": "Catelyn", "surname": "Stark" },"child": { "name": "Arya", "surname": "Stark" }}, {"parent": { "name": "Catelyn", "surname": "Stark" },"child": { "name": "Bran", "surname": "Stark" }}, {"parent": { "name": "Ned", "surname": "Stark" },"child": { "name": "Jon", "surname": "Snow" }}, {"parent": { "name": "Tywin", "surname": "Lannister" },"child": { "name": "Jaime", "surname": "Lannister" }}, {"parent": { "name": "Tywin", "surname": "Lannister" },"child": { "name": "Cersei", "surname": "Lannister" }}, {"parent": { "name": "Tywin", "surname": "Lannister" },"child": { "name": "Tyrion", "surname": "Lannister" }}, {"parent": { "name": "Cersei", "surname": "Lannister" },"child": { "name": "Joffrey", "surname": "Baratheon" }}, {"parent": { "name": "Jaime", "surname": "Lannister" },"child": { "name": "Joffrey", "surname": "Baratheon" }}
]FOR rel in dataLET parentId = FIRST(FOR c IN CharactersFILTER c.name == rel.parent.nameFILTER c.surname == rel.parent.surnameLIMIT 1RETURN c._id)LET childId = FIRST(FOR c IN CharactersFILTER c.name == rel.child.nameFILTER c.surname == rel.child.surnameLIMIT 1RETURN c._id)FILTER parentId != null AND childId != null//顶点和边相连INSERT { _from: childId, _to: parentId } INTO ChildOfRETURN NEW

FIRST()从数据中取第一个元素
NEW/OLD,NEW表示更改后的document,OLD表示更改之前的document

我们完成了关系的建立,尝试从关系中获取数据
查看关系图

FOR c IN ChildOfRETURN c

但发现关系图的顶点都是用id表示,不易看清楚,可以使用以下语句查看

FOR c IN ChildOf//CONCAT(c._from,DOCUMENT(c._from).name)RETURN {_key:c._key,_id:c._id,_from:DOCUMENT(c._from).name,_to:DOCUMENT(c._to).name,_rev:c._rev}

对图的使用
从孩子找父母

FOR c IN CharactersFILTER c.name == "Bran"//1..1分别表示最小最大遍历深度,OUTBOUND表示沿着边的方向,INBOUND表示反方向FOR v IN 1..1 OUTBOUND c ChildOfRETURN v.name

从父母找孩子

FOR c IN CharactersFILTER c.name == "Ned"FOR v IN 1..1 INBOUND c ChildOfRETURN v.name

ArangoDB教程(二)-AQL语句使用,图使用,结合WEB界面端相关推荐

  1. 华为昇腾系列开发入门教程二:开局一张图,手把手教你鉴“XX”

    编 | 章磊 啊,上篇文章发布后,得到了数以百亿计的隐形网友疯狂转发和点赞,鄙人甚至能YY出他们用鼠标摁下"

  2. ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序

    本系列教程翻译自微软官方教程,官方教程地址:Get started with ASP.NET Core MVC | Microsoft Docs 本系列教程介绍了构建MVC Web应用程序的基础知识. ...

  3. 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/16384009 作者:毛星 ...

  4. 【Visual C++】游戏开发五十二 浅墨DirectX教程二十 骨骼动画来袭(一)

    这是答应大家的讲解骨骼动画的文章的N部曲的第二篇.这篇文章里,我们对现行的三种模型动画技术进行了概述,然后对X文件构成进行了详细的剖析,最后放出了骨骼动画的第一个示例程序,载入了<诛仙>中 ...

  5. 【Visual C++】游戏开发五十二 浅墨DirectX教程二十 骨骼动画来袭(一)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8832812 作者:毛星云(浅墨 ...

  6. 【Visual C++】游戏开发五十四 浅墨DirectX教程二十一 视觉的诡计 公告板 Billboard 技术

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  7. 【Visual C++】游戏开发五十四 浅墨DirectX教程二十一 视觉的诡计:公告板(Billboard)技术...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 作者:毛星云(浅墨)   微博:@浅墨_毛星云邮箱: happylifemxy@163.com I'm back~,这段时间大家久等了~ ...

  8. 【Visual C++】游戏开发五十七 浅墨DirectX教程二十四 打造游戏GUI界面(二)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/16922703 作者:毛星 ...

  9. 【Visual C++】游戏开发五十五 浅墨DirectX教程二十二 水乳交融的美学:alpha混合技术

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/15026917 作者:毛星 ...

  10. C#开发Unity游戏教程之判断语句

    C#开发Unity游戏教程之判断语句 游戏执行路径的选择--判断 玩家在游戏时,无时无刻不在通过判断做出选择.例如,正是因为玩家做出的选择不同,才导致游戏朝着不同的剧情发展,因此一个玩家可以对一个游戏 ...

最新文章

  1. Dump File Bat
  2. android popupwindow dialog区别,Android PopUpWindow使用详解
  3. python中的gui界面编程_python应用系列教程——python的GUI界面编程Tkinter全解
  4. easyui 转换 html5,easyUI Tabs
  5. android倒计时录制视频下载,android录制视屏(预览,倒计时)
  6. 并查集 - 由斜杠划分区域
  7. 数据结构与算法之选择排序
  8. 1张手稿图讲明白 Kubernetes 是怎么运行的
  9. c语言学习自我评价,学习自我评价4篇
  10. 你确定你会使用git commit?
  11. 涅槃重生的下一个超级风口:8本书助你赢在未来
  12. python自带的和numpy带的all(),any() 来判断各空矩阵和零矩阵 None,以及shape
  13. K - Repeating Decimals(循环小数)
  14. C语言—gotoxy()函数
  15. 数据挖掘案例:建立客户流失模型
  16. 前端之JavaScript入门篇
  17. 《数字信号处理》——(一).DTFT、DFT(python实现)
  18. Java调用soap协议的webservice
  19. [案例7-2]商城进货交易记录
  20. Linux系统访问Windows(本机)的Navicat数据库

热门文章

  1. 职场生涯的3个步骤--法、儒、道家的管理哲学
  2. 马小云:利用信息差赚钱的暴利创业项目 ,批量开店月入3万
  3. 【高等数学】平面束方程的俩种设法与其中一种设法会出现的漏解问题
  4. matlab 图像内接矩形,图像轮廓最大内接矩形的求法
  5. html里表格做斜线表头,word2010怎么绘制斜线表头
  6. 分布式系统容错性方案设计:重试与幂等
  7. C语言 简单实现计算器功能 ·函数指针数组实现计算器
  8. HTML5 input类型 range滑动条 介绍与使用
  9. png在线转换透明ICO
  10. python批量png转ico