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就没有使用的必要。