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

Tho*_*ger 5 arangodb

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

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

例子:

let target_key = "42"

FOR doc IN myCollection
    FILTER doc._key == target_key
    RETURN UNSET(doc, "myAttribute")
Run Code Online (Sandbox Code Playgroud)

该示例返回没有属性的原始文档myAttribute,但新版本未保存到数据库中,因此这似乎只是一个投影副本。

CoD*_*anX 8

或者,您可以设置要删除的属性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
Run Code Online (Sandbox Code Playgroud)

null文档中具有显式值的属性将被保留。仅触及在WITH之后指定的属性。

注意:如果您解释查询,您将nullMeansRemove: true“写入查询选项”下看到而不是keepNull: false


Tho*_*ger 6

对此的简单答案是UNSETREPLACE函数结合。

UNSET适用于单个文档中的属性,也REPLACE适用于集合中的整个文档。

let target_key = "42"

FOR doc IN myCollection
    FILTER doc._key == target_key
    REPLACE UNSET(doc, "myAttribute") IN myCollection
    RETURN NEW
Run Code Online (Sandbox Code Playgroud)

myAttribute此示例返回已删除的新文档,UNSET该文档已保存到集合中REPLACE

andNEW关键字可以与and 一起OLD使用。UPDATEUPSERT

我读完这个问题后就明白了这一点。我觉得这是一个太简单的任务,无法坚持下去,但我希望这对我之后的人有用。

  • *Return New* 中的 *New* 未被识别,我删除了 Return 语句并且工作得很好。感谢您节省了我生命中的几个小时。 (2认同)