ArangoDB 学习笔记(1)入门篇

主要学习内容:

  • 安装并运行本地ArangoDB服务器
  • 使用Web界面与之交互
  • 存储数据库中的示例数据
  • 查询数据库以再次检索数据
  • 编辑和删除现有数据

1、安装

下载地址

https://www.arangodb.com/download/

安装过程中将提示输入root的密码,记住root密码已被登陆使用。

安装客户端

如果客户端显示未将默认执行命令添加到环境变量中,可以人工添加

C:\Users\name\AppData\Local\ArangoDB3-client 3.3.15\usr\bin

  这样就可以使用arangoimp,导入数据,arangoexport导出数据等,foxx等功能了

 

2、web界面

默认情况下,启用身份验证。默认用户是 root根据所使用的安装方法,提示输入root密码或默认root密码的安装过程为空(参见上文)。

Aardvark登录表

接下来,将询问您使用哪个数据库。每个服务器实例都附带一个_system数据库。选择此数据库以继续。

选择数据库

然后,您应该在仪表板上显示如下服务器统计信息:

Aardvark仪表板请求统计

有关该接口的更详细说明,请参阅Web Interface

3、数据库、集合和文档

(1)创建

数据库是一组集合,集合存储了记录,记录就是所谓的文档。因此collections可以被视为关系型数据库中的表,documents可以被视为表中的每一行数据。不同的是我们不需要定义字段,因为每一个document当中包含的是键值对,统一个collections中的所有documents的键值结构大多数是相同的,但数据库并不硬性要求documents必须结构一致。

现在我们可以使用默认_system数据库并使用Web界面来创建集合collections和文档documents

首先创建一个collections:名字可以叫users

点击+增加文档,__key__选择默认自增,不进行设置。这里的key是惟一的而且一旦设定将无法更改。

_key 总是字符串格式,如自动生成的key为3553,然后_id为users/3553

现在该文档中还没有任何内容,我们可以点击Append来添加内容,会出现Field和Value两个空白可以填列。我们可以输入name:你的名字,age:你的年龄,然后点击保存。这样就保存到了数据库中。

再次点击collection,点击users就可以看到刚刚创建的一个document了。

(2)查询

点击Queries

输入查询语句:

RETURN DOCUMENT("users/3553")

  将会显示刚刚创建的内容

[
{
"_key": "3553",
"_id": "users/3553",
"_rev": "_XbVPcM6--_",
"name": "your name",
"age": 25
}
]

DOCUMENT()语句是用来查找一个文档或一组文档,当你指导key或者id的时候。查询的结果是一个数组。

这种查询被称为数据访问查询,没有修改;还有一种是数据修改查询。

INSERT { name: "Katie Foster", age: 27 } INTO users

  那么我们可以看到我们想users collections当中新增了一个document.我们可以看到返回的是一个空数组。因为我们没有定义RETURN.

如果我们希望返回刚刚创建的document,我们可以使用RETURN NEW来显示

INSERT { name: "James Hendrix", age: 69 } INTO users
RETURN NEW

  如何查询刚刚创建的三个用户呢?

我们可以使用DOCUMENT([ ])包含一个数组的形式来查询。示例:

RETURN DOCUMENT(["users/5595","users/3553","users/5138"])

  查询结果:

[
  [
    {
      "_key": "5595",
      "_id": "users/5595",
      "_rev": "_XbVgg3e--_",
      "name": "James Hendrix",
      "age": 69
    },
    {
      "_key": "3553",
      "_id": "users/3553",
      "_rev": "_XbVPcM6--_",
      "name": "name1",
      "age": 25
    },
    {
      "_key": "5138",
      "_id": "users/5138",
      "_rev": "_XbVd-ei--_",
      "name": "name2",
      "age": "22"
    }
  ]
]

  但是如果用户很多的情况下,使用这种形式就不好了。

我们可以使用FOR语句来循环遍历返回结果

FOR user IN users
RETURN user

  你可以看到返回的结果与插入的循序并不一致,因为返回的结果是没有顺序的,如果希望排序,可以加上SORT 

FOR user IN users
SORT user._key
RETURN user

  注意因为_key是字符串,因此排序总是1在前面,这样可能不是我们想要的,我们也可以根据age进行排序

FOR user IN users
  SORT user.age DESC
  RETURN user

  DESC代表降序。

如果我们希望筛选年龄在30岁以上的人,我们可以使用FILTER

FOR user IN users
  FILTER user.age > 30
  SORT user.age
  RETURN user

  修改数据可以使用UPDATE

UPDATE "5138" WITH {age:33} IN users
RETURN NEW  

UPDATE 后面跟key,WITH后跟修改的内容,IN 跟着collections

如果使用REPLACE的话,那么5138用户将只有id,key和age属性,name属性将消失。

再次查询,我们得到的用户名将增加一位。

FOR user IN users
  FILTER user.age > 30
  SORT user.age
  RETURN user.name

  

如果我们要更改输出的格式,可以在RETURN中使用键值对的方式来指定

FOR user IN users
  RETURN { userName: user.name, age: user.age }

  这样返回的结果就是userName,而不是默认的name了。

[
  {
    "userName": "James Hendrix",
    "age": 69
  },
  {
    "userName": "John Smith",
    "age": 32
  },
  {
    "userName": "Katie Foster",
    "age": 40
  }
]

  除了该表结构,我们换可以改变值,如

FOR user IN users
  RETURN CONCAT(user.name, "'s age is ", user.age)

  这里的CONCAT是用来连接字符串的,这样我们得到的结果是:

[
  "James Hendrix's age is 69",
  "John Smith's age is 32",
  "Katie Foster's age is 40"
]

  小的实验,

返回所有的用户配对,除了自己和自己配对

FOR user1 IN users
  FOR user2 IN users
    FILTER user1!=user2
    RETURN [user1.name,user2.name]

  我们还可以计算两个人的年龄和

FOR user1 IN users
  FOR user2 IN users
    FILTER user1!=user2
    RETURN {pairs:[user1.name,user2.name],
            sumofages:user1.age+user2.age}

  如果我们仅想要两个年龄和小于80的人,我们可以使用LET 来定义一个临时变量

FOR user1 IN users
  FOR user2 IN users
    FILTER user1!=user2
    LET sumofages = user1.age+user2.age
    FILTER sumofages<80
    RETURN {pairs:[user1.name,user2.name],
            sumofages}

  注意这里的sumofages由于键值名称都为sumofages,可以简写。与js相同。

删除用户,使用REMOVE

REMOVE "9883" IN users

  当然我们也可以采用循环删除的方式,删除年龄大于30的用户。

FOR user IN users
    FILTER user.age >= 30
    REMOVE user IN users

  

 

posted @ 2018-09-14 11:03  tutu_python  阅读(2311)  评论(0编辑  收藏  举报