ArangoDb学习笔记————High-level operations(三)

REMOVE:

REMOVE keyExpression IN collection options

简单的删除没什么好说,就是keyExpression里面需要有删除元素的_key属性。

删除的时候可以还加上OPTIONS关键字

//忽略报错
FOR i IN 1..1000
  REMOVE { _key: CONCAT('test', i) } IN users OPTIONS { ignoreErrors: true }
//确保数据成功写到硬盘
FOR i IN 1..1000
  REMOVE { _key: CONCAT('test', i) } IN users OPTIONS { waitForSync: true }
//确保删除的时候数据没有变更
FOR i IN 1..1000
  REMOVE { _key: CONCAT('test', i), _rev: "1287623" } IN users OPTIONS { ignoreRevs: false }

最后还能把删除的元素返回(虽然不知道这个是为了满足什么需求)

FOR u IN users
  REMOVE u IN users 
  LET removed = OLD 
  RETURN removed._key

 UPDATE:

UPDATE document IN collection options
UPDATE keyExpression WITH document IN collection options

update是更新操作,keyExpression一样也需要有元素的_key属性。

OPTIONS操作多了几个:

{ keepNull: false }  //去除值为null的无用属性
{ mergeObjects: false } //是否merge属性,false的时候就不会更新已经有的属性
{ exclusive: true } //提高更新速度

同样也支持返回更新前和更新后的元素

UPDATE document IN collection options RETURN OLD
UPDATE document IN collection options RETURN NEW
UPDATE keyExpression WITH document IN collection options RETURN OLD
UPDATE keyExpression WITH document IN collection options RETURN NEW

REPLACE:

REPLACE document IN collection options
REPLACE keyExpression WITH document IN collection options

replace是替换,update是更新。剩下的基本跟update一模一样。

INSERT:

INSERT document INTO collection [ OPTIONS options ]

插入的语法也比较简单,就是edge类型的collection插入时需要_from和_to属性。

OPTIONS:

{ overwrite: true } //插入时覆盖_key值相同的元素

支持返回插入的元素

INSERT document INTO collection RETURN NEW

UPSERT:

UPSERT searchExpression INSERT insertExpression UPDATE updateExpression IN collection options
UPSERT searchExpression INSERT insertExpression REPLACE updateExpression IN collection options

相关与oracle里面的merge,通过searchExpression判断,没有则insert,有则update/replace.

UPSERT { name: 'superuser' } 
INSERT { name: 'superuser', logins: 1, dateCreated: DATE_NOW() } 
UPDATE { logins: OLD.logins + 1 } IN users

 OPTIONS没有额外的

也支持返回OLD和NEW,要注意的是如果是insert,OLD是null值。

UPSERT { name: 'superuser' } 
INSERT { name: 'superuser', logins: 1, dateCreated: DATE_NOW() } 
UPDATE { logins: OLD.logins + 1 } IN users
RETURN { doc: NEW, type: OLD ? 'update' : 'insert' }

WITH:

单独列出来是因为with可以像Oracle里面一样用在最前面,列出需要使用的collection。

WITH managers, usersHaveManagers
FOR v, e, p IN OUTBOUND 'users/1' GRAPH 'userGraph'
  RETURN { v, e, p }

如果collection在AQL是明确的,WITH就没有使用的必要。

上一篇:1658. Minimum Operations to Reduce X to Zero


下一篇:C# Entity Framework The ObjectContext instance has been disposed and can no longer be used for opera