From 923eae5d4bd562f932c9e18988bff1ce5057bbff Mon Sep 17 00:00:00 2001 From: SisMaker <1713699517@qq.com> Date: Mon, 6 Apr 2020 15:35:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/arangoApi/agCollections.erl | 10 ++- src/arangoDoc/Aql.md | 114 ++++++++++++++++++++++++++++++++ src/arangoDoc/启动相关.md | 8 +++ src/arangoDoc/命名规范.md | 44 ++++++++++++ 4 files changed, 170 insertions(+), 6 deletions(-) create mode 100644 src/arangoDoc/Aql.md create mode 100644 src/arangoDoc/启动相关.md create mode 100644 src/arangoDoc/命名规范.md diff --git a/src/arangoApi/agCollections.erl b/src/arangoApi/agCollections.erl index 7f8e251..0320399 100644 --- a/src/arangoApi/agCollections.erl +++ b/src/arangoApi/agCollections.erl @@ -175,7 +175,6 @@ collResponsibleShard(PoolNameOrSocket, CollName, MapData) -> BodyStr = jiffy:encode(MapData), agHttpCli:callAgency(PoolNameOrSocket, ?AgGet, Path, [], BodyStr). -% 返回集合永久链接的分片 ID % 返回集合的分片ID % 默认情况下,返回带有集合的分片ID的JSON数组。 % 如果details参数设置为true,它将返回一个以分片ID作为对象属性键的JSON对象,并将每个分片的负责服务器映射到它们。在详细的响应中,领导者碎片将排在阵列的首位。 @@ -255,12 +254,11 @@ collList(PoolNameOrSocket, IsExcludeSystem) -> % 请求主体对象可以选择包含以下属性: % count:如果设置,则控制返回值是否应包括集合中的文档数。将count设置为 false可以加快加载集合的速度。为默认值 数为true。 % PUT /_api/collection/{collection-name}/load -collLoad(PoolNameOrSocket, CollName) -> +loadColl(PoolNameOrSocket, CollName) -> Path = <<"/_api/collection/", CollName/binary, "/load">>, agHttpCli:callAgency(PoolNameOrSocket, ?AgPut, Path, [], undefined). - -collLoad(PoolNameOrSocket, CollName, IsCount) -> +loadColl(PoolNameOrSocket, CollName, IsCount) -> case IsCount of false -> Path = <<"/_api/collection/", CollName/binary, "/load">>, @@ -282,7 +280,7 @@ collLoad(PoolNameOrSocket, CollName, IsCount) -> % 3:边缘收集 % isSystem:如果为true,则该集合为系统集合。 -collUnload(PoolNameOrSocket, CollName) -> +unloadColl(PoolNameOrSocket, CollName) -> Path = <<"/_api/collection/", CollName/binary, "/unload">>, agHttpCli:callAgency(PoolNameOrSocket, ?AgPut, Path, [], undefined). @@ -347,7 +345,7 @@ collChangeProperties(PoolNameOrSocket, CollName, MapData) -> % isSystem:如果为true,则该集合为系统集合。 % 如果重命名集合成功,那么该集合还将_graphs在当前数据库中该集合内的所有图形定义中重命名。 % 注意:此方法在群集中不可用。 -collRename(PoolNameOrSocket, OldName, NewName) -> +renameColl(PoolNameOrSocket, OldName, NewName) -> Path = <<"/_api/collection/", OldName/binary, "/rename">>, NameStr = jiffy:encode(NewName), agHttpCli:callAgency(PoolNameOrSocket, ?AgPut, Path, [], <<"{\"name\":", NameStr/binary, "}">>). diff --git a/src/arangoDoc/Aql.md b/src/arangoDoc/Aql.md new file mode 100644 index 0000000..2e1057e --- /dev/null +++ b/src/arangoDoc/Aql.md @@ -0,0 +1,114 @@ +插入文档 + 语法是INSERT document INTO collectionName。该文档是一个对象,您可以从JavaScript或JSON中了解它,它由属性键和值对组成。 + 属性键周围的引号在AQL中是可选的。键总是字符序列(字符串),而属性值可以有不同的类型: + 空值 + 布尔值(true,false) + 数字(整数和浮点数) + 串 + 排列 + 宾语 + + 该LET关键字定义一个带有名称数据的变量和一个对象数组作为值,因此LET variableName = valueExpression表达式是一个文字数组定义[ {...}, {...}, ... ]。 + + FOR variableName IN expression用于迭代数据数组的每个元素 。在每个循环中,将一个元素分配给变量d。然后在INSERT语句中使用此变量而不是文字对象定义。基本上是做什么的: + + INSERT { + "name": "Robert", + "surname": "Baratheon", + "alive": false, + "traits": ["A","H","C"] + } INTO Characters + + INSERT { + "name": "Jaime", + "surname": "Lannister", + "alive": true, + "age": 36, + "traits": ["A","F","B"] + } INTO Characters + + ... + 注意:AQL不允许INSERT在单个查询中针对同一集合的多个操作。然而, 允许它作为FOR循环体,插入多个文档,就像我们对上面的查询所做的那样。 + + + FOR c IN Characters_1 RETURN c + 循环的语法是FOR variableName IN collectionName。对于集合中的每个文档,将为c分配一个文档,然后根据循环体返回该文档。查询返回我们先前存储的所有字符。 + 该文档包含我们存储的四个属性,以及数据库系统添加的另外三个属性。每个文档都需要一个唯一的文档_key,用于在集合中标识它。它_id是计算属性,集合名称, + 正斜杠/和文档键的串联。它唯一标识数据库中的文档。_rev是系统管理的修订版ID。 + + 用户可以在创建文档时提供文档键,也可以自动分配唯一值。它以后不能改变。以下划线开头的所有三个系统属性_都是只读的。 + + 我们可以使用文档密钥或文档ID在AQL函数的帮助下检索特定文档DOCUMENT() + +更新文档 + UPDATE documentKey WITH object IN collectionName l列出的属性更新指定的文档(存在则添加它们) + 要更新整个文档 整个用replace + + 可以用循环 更新或者替换属性 + FOR c IN Character + UPDATE c with {swason: 1} IN Character + +删除文件 + 要从集合中删除文档 执行 REMOVE + REMOVE "201213" IN Character + + FOR C IN Characters + REMOVE c IN Characters + +匹配条件 + 为了查找满足条件的文档 FILTER AQL + FOR c IN Characters + FILTER c.age >= 12 + RETURN c.name + + 多种条件 + FOR c IN Characters + FILTER c.age 《 13 + FILTER c.age != null + RETURN {name: c.name, age: c.age} 可以用AND运算符 + 同时也有OR运算符 + +限制结果计数 + FOR c IN Characters_1 + LIMIT 5 + RETURN c.name + FOR c IN Characters + LIMIT 2,5 + RETURN c.name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/arangoDoc/启动相关.md b/src/arangoDoc/启动相关.md new file mode 100644 index 0000000..2904d29 --- /dev/null +++ b/src/arangoDoc/启动相关.md @@ -0,0 +1,8 @@ +Start ArangoDB shell client: + > /usr/bin/arangosh + +Start ArangoDB service: + > systemctl start arangodb3.service + +Enable ArangoDB service: + > systemctl enable arangodb3.service \ No newline at end of file diff --git a/src/arangoDoc/命名规范.md b/src/arangoDoc/命名规范.md new file mode 100644 index 0000000..ccc7bc7 --- /dev/null +++ b/src/arangoDoc/命名规范.md @@ -0,0 +1,44 @@ +数据库名称 + ArangoDB将始终从名为_system的默认数据库启动。用户可以在ArangoDB中创建其他数据库,前提是数据库名称符合以下约束: + 数据库名称只能由字母a到z(允许大小写),数字0到9以及下划线(_)或破折号(-)符号组成。这也意味着,任何非ASCII数据库名称都不是允许的 + 数据库名称必须始终以字母开头。下划线开头的数据库名称被认为是系统数据库,用户不应创建或删除这些名称 + 数据库名称允许的最大长度为64个字节 + 数据库名称区分大小写 + +集合名称和视图名称 + 用户可以根据需要选择其集合和视图的名称,前提是不违反以下命名约束: + 名称只能由字母a到z(大小写),数字0到9以及下划线(_)或破折号(-)符号组成。这也意味着不允许使用任何非ASCII名称。 + 视图名称必须始终以字母开头。 + 用户定义的集合名称必须始终以字母开头。系统集合名称必须以下划线开头。 + 所有以下划线开头的集合名称均被视为仅用于ArangoDB内部使用的系统集合。最终用户不应将系统集合名称用于自己的集合。 + 名称的最大允许长度为256个字节。 + 集合名称和视图名称区分大小写。 + +文档_key + 用户可以为保存的文档定义自己的密钥。文档密钥将与文档一起保存在_key属性中。用户可以根据需要选择键值,只要这些键值符合以下限制: + 键必须是字符串值。不允许使用数字键,但是可以将任何数字值放入字符串中,然后用作文档键。 + 密钥必须至少为1个字节,最大为254个字节。指定时不允许使用空键(尽管从文档中完全省略_key属性可能是有效的 ) + 它必须由字母az(小写或大写),数字0-9或以下任何标点字符组成: _ - : . @ ( ) + , = ; $ ! * ' % + 键值内不能使用任何其他字符,尤其是多字节UTF-8序列,空格或标点字符 + 该密钥在使用的集合中必须唯一 + 键区分大小写,即myKey和MyKEY被认为是不同的键。 + 创建新文档时,指定文档密钥是可选的。如果用户未指定文档密钥,则ArangoDB将自己创建文档密钥,因为每个文档都必须具有密钥。 + 除上述限制外,无法保证自动生成的文档密钥的格式和模式。因此,客户应将自动生成的文档密钥视为不透明的值,而不应依赖于其格式。 + 生成密钥的当前格式是包含数字的字符串。从后面生成的_key值将包含比之前生成的_key值更高的数字的意义上,数字值反映了时间顺序。但是服务器将生成的确切值是不可预测的。请注意,如果按_key属性排序,则将使用字符串比较,这意味着"100"小于"99"。 + +属性名称 + 用户可以根据需要选择文档属性的属性名称,前提是不违反以下属性命名约束: + 以下划线开头的属性名称被视为ArangoDB内部使用的系统属性。此类属性名称已被ArangoDB用于特殊目的: + _id用于包含文档的句柄 + _key用于包含文档的用户定义键 + _rev用于包含文档的修订号 + 在边缘收藏中, + _from + _to + 属性用于引用其他文档。 + 将来可能会添加更多系统属性,恕不另行通知,因此最终用户应尽量避免使用以下划线开头的自己的属性名称。 + 从理论上讲,属性名称可以根据需要包括标点符号和特殊字符,前提是该名称是有效的UTF-8字符串。为了获得最大的可移植性,应避免使用特殊字符。例如,属性名称可能包含点符号,但是点在JavaScript和AQL中具有特殊含义,因此当以这些语言中的一种使用此类属性名称时,最终用户需要用引号引起来。总的来说,最好使用不需要使用所有语言进行任何引用/转义的属性名称。如果属性映射到客户端的对象成员,则包括客户端使用的语言(例如Ruby,PHP)。 + 当在AQL查询中使用属性名称时,以加号(@)开头的属性名称必须用反引号括起来,以区别绑定变量。因此,我们建议您不要使用以at-标记开头的属性,尽管它们在正确使用后仍然可以使用。 + ArangoDB不对属性名称实施长度限制。但是,长属性名称可能会在结果集中使用更多的内存等。因此,不建议使用长属性名称。 + 属性名称区分大小写。 + 不允许使用名称为空(字符串为空)的属性。 \ No newline at end of file