如何永久取消设置ArangoDB文件的属性?

时间:2017-08-28 14:29:33

标签: arangodb

我想从ArangoDB中的文档中删除属性。

我认为正确的方法是使用函数UNSET(doc, attributeName1, ..., attributeNameN)。但是,仅凭这一点,数据库中没有任何变化。

示例:

let target_key = "42"

FOR doc IN myCollection
    FILTER doc._key == target_key
    RETURN UNSET(doc, "myAttribute")

该示例返回原始文档没有属性myAttribute,但新版本未保存到数据库,所以看起来这只是一个预计副本。

2 个答案:

答案 0 :(得分:2)

对此的简单回答是将UNSETREPLACE函数合并。

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保存到集合中。

NEWOLD关键字可与UPDATEUPSERT一起使用。

我在阅读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