我想从ArangoDB中的文档中删除属性。
我认为正确的方法是使用函数UNSET(doc, attributeName1, ..., attributeNameN)
。但是,仅凭这一点,数据库中没有任何变化。
示例:
let target_key = "42"
FOR doc IN myCollection
FILTER doc._key == target_key
RETURN UNSET(doc, "myAttribute")
该示例返回原始文档没有属性myAttribute
,但新版本未保存到数据库,所以看起来这只是一个预计副本。
答案 0 :(得分:2)
对此的简单回答是将UNSET
与REPLACE
函数合并。
UNSET
适用于单个文档中的属性,而REPLACE
适用于集合中的整个文档。
let target_key = "42"
FOR doc IN myCollection
FILTER doc._key == target_key
REPLACE UNSET(doc, "myAttribute") IN myCollection
RETURN NEW
此示例返回使用myAttribute
删除UNSET
的新文档,该文档使用REPLACE
保存到集合中。
NEW
和OLD
关键字可与UPDATE
和UPSERT
一起使用。
我在阅读this issue之后想到了这一点。我觉得这是一个太简单的任务,但我希望这对我之后的人有用。
答案 1 :(得分:1)
或者,您可以将要删除的属性设置为null
并使用keepNull
选项:
LET target_key = "42"
FOR doc IN myCollection
FILTER doc._key == target_key
UPDATE doc WITH { myAttribute: null } IN myCollection
OPTIONS { keepNull: false }
RETURN NEW
保留文档中具有显式null
值的属性。仅触摸WITH之后指定的属性。
注意:如果您解释该查询,您会在撰写查询选项而不是nullMeansRemove: true
下看到keepNull: false
。