当前位置:   article > 正文

ArangoDB(二)——增删改查及与SQL的比较_arango的remove怎么用

arango的remove怎么用

数据库,集合和文档

数据库是集合集。
集合存储记录,称为文档。
集合相当于RDBMS中的表,文档可以被认为是表中的行。
不同之处在于你没有事先定义哪些列(或更确切地说是属性)。任何集合中的每个文档都可以具有任意属性键和值。然而,单个集合中的文档可能在实践中具有类似的结构,但数据库系统本身并不强加它,并且无论数据如何,都将稳定且快速地运行。

创建集合Collection

单击COLLECTIONS—单击 Add Collection–命名(例如 users)

创建(添加)文档document

单击右侧带有白色加号的绿色圆圈,以在此集合中创建第一个文档。一个对话框会询问你_key。您可以将该字段留空,然后单击“ 创建”以让数据库系统分配自动生成的(唯一)密钥 。之后可以向里面添加相关的键值。

查 询 \color{red}{查询}

ArangoDB的查询语言来检索我们的文档。

  • 根据创建文档的Id(其他也行)查询

  • 单击QUERIES菜单项以显示查询编辑器并键入以下内容:RETURN DOCUMENT("users/2887")

  • 点击Execute执行,执行结果如下所示:

    	[
    	  {
    	    "_key": "2887",
    	    "_id": "users/2887",
    	    "_rev": "_YiiiIlW--_",
    	    "name": "anna",
    	    "age": "18",
    	    "sex": "女"
    	  }
    	]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • DOCUMENT()这个函数是用来根据_key或_id来获取记录的

I N S E R T \color{red}{INSERT} INSERT
  • 使用修改查询插入第二个文档
    INSERT { name: "Anna", age: 20 } INTO users
    
    • 1
  • 运行上面的查询,结果将会有一个空数组,因为我们没有使用RETURN关键字指定返回的内容。
    在这里插入图片描述
  • 它在修改查询中是可选的,但在数据访问查询中是必需的。
  • 让我们添加另一个用户,但这次返回新创建的文档:
    INSERT { name: "Linda", age: 20} INTO users
    RETURN NEW
    
    • 1
    • 2
  • NEW是一个伪变量,指的是insert插入的这条数据。结果如下所示:
    [
    	{
          "_key": "5880",
          "_id": "users/5880",
          "_rev": "_YijRjiW---",
          "name": "Linda",
          "age": 20
        }
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 现在我们的集合中有3个用户,如何使用单个查询检索所有用户?以下不起作用:
    RETURN DOCUMENT("users/2887")
    RETURN DOCUMENT("users/4887")
    RETURN DOCUMENT("users/5880")
    
    • 1
    • 2
    • 3
  • RETURN此处只能有一个语句,若尝试执行它,则会引发语法错误。该DOCUMENT()函数提供了一个辅助签名来指定多个文档句柄,因此我们可以这样做:
    RETURN DOCUMENT( ["users/2887", "users/4887", "users/5880"] )
    
    • 1
  • 若有多个用户呢?简单的方法如下所示:
    FOR user IN users
    RETURN user
    
    • 1
    • 2
    执行结果如下所示:
    [
      {
        "_key": "2887",
        "_id": "users/2887",
        "_rev": "_YiiiIlW--_",
        "name": "anna",
        "age": "18",
        "sex": "女"
      },
      {
        "_key": "4887",
        "_id": "users/4887",
        "_rev": "_Yii8Tl6---",
        "name": "Anna",
        "age": 20
      },
      {
        "_key": "5880",
        "_id": "users/5880",
        "_rev": "_YijRjiW---",
        "name": "Linda",
        "age": 20
      }
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    综上,在ArangoDB中的单文档查询使用return document(),多文档查询使用for in循环。
U P D A T E \color{red}{UPDATE} UPDATE

UPDATE允许部分编辑现有文档,只替换指定的属性并按原样保留其他的所有属性。

UPDATE  "2887"  WITH { QQ:"2320730324"} IN users
RETURN NEW
  • 1
  • 2

UPDATE关键字之后是文件密钥(_key属性等)来标识要修改的内容。要更新的属性在WITH关键字后面写为对象。IN表示在哪个集合中执行此操作,就像INTO(这两个关键字在这里实际可以互换)。如果我们使用NEW伪变量,则返回包含所应用更改的完整文档:

[
  {
    "_key": "2887",
    "_id": "users/2887",
    "_rev": "_YiyppL6--_",
    "name": "anna",
    "age": "18",
    "sex": "女",
    "QQ": "2320730324"  //多了此行
  }
]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
R E M O V E ( 删 除 ) \color{red}{REMOVE(删除)} REMOVE()
REMOVE "5880" IN users
  • 1

SQL与AQL比较

SQLAQL
databasedatabase
tablecollection
rowdocument
columnattribute
table joinscollection joins
primary keyprimary key (automatically present on _key attribute)
indexindex
  • 增(INSERT )
    //SQL: 
      INSERT INTO users (name, age) VALUES ("anna", "20"); 
       
    //AQL:   
      INSERT { name: "anna", age: "20" } INTO users          
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 改(UPDATE)
    //SQL: 
      UPDATE users SET name = "Anna" WHERE id = 2887;
      
    //AQL:   
      UPDATE { _key: "2887" }  WITH { name: "Anna" } IN users
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 删(DELETE / REMOVE)
    //SQL: 
      DELETE FROM users WHERE id = 2887;  
      
    //AQL:   
      REMOVE { _key:"2887" }  IN users         
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 查(SELECT/Queries)
    //SQL
    SELECT * FROM users;
    
    //AQL
    
    //单个文档查询
    return document("id")
    //多文档查询
    FOR user IN users
    RETURN user
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

对比之后是不是觉得AQL语言更接近原生呢

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/706309
推荐阅读
相关标签