【问题标题】:In AQL how to re-parent a vertex在 AQL 中如何重新设置顶点
【发布时间】:2016-04-27 03:49:27
【问题描述】:

我正在尝试重新设置一个顶点。这个我试过了,好像没有效果

FOR c IN pm_child FILTER c._to == 'pmlibrary/48198494363' UPDATE c WITH {_from: 'pmattic/48212650139'} IN pm_child

当我查看 pm_child 集合时,_from 字段保持不变。修改边缘的正确方法是什么?

【问题讨论】:

    标签: arangodb


    【解决方案1】:

    作为_key-属性_from_toare system attributes and thus immutable.

    因此,虽然您可以在创建文档时指定它们,但以后无法更改它们。

    您需要使用新的_from_to 创建一个新文档才能实现您想要的。

    We're thinking about how queries could raise a warning 但还没有找到好的解决方案。

    我会给你一个例子如何做到这一点using the social graph - 让 bob 成为 charly 的朋友并断开 bob 和 戴安娜。如果我们 MERGE 现有的边缘及其新的 _to,我们需要创建一个新文档:

    FOR rel IN relation FILTER rel._id == "relation/bobAndDiana"
      LET newRel = MERGE(rel, {_to: "persons/charlie",
                               _id:"relation/bobAndCharlie",
                               fieldToWhipe: null,
                               _key: "bobAndCharlie"})
      INSERT newRel IN relation RETURN newRel
    

    并删除另一个查询中的原始边(您可能想为此编写一个事务):

    FOR rel IN relation FILTER rel._id == "relation/bobAndDiana" REMOVE rel IN relation
    

    在 ArangoDB 3.0 版本中,可以直接更新 _from_to

    【讨论】:

    • 感谢您对我所有问题的快速简洁的回答。正是由于这种支持,我对涉足 ArangoDB 感到非常兴奋。
    • 作为这个问题的后续,我看到你必须在合并中创建一个新的 id 和 key。有没有办法让系统生成这些或至少确定一个保证唯一的设置?
    • 仅供参考,在我的情况下它更容易一些,我只是创建了一个事务来删除现有边缘并插入另一个边缘(因为这些边缘没有任何额外的字段)。再次感谢您的指导。
    • 感谢您的好话;-> 您需要输入一个带有null 的值,这将导致该字段未设置,以便数据库可以为您生成它。我已经编辑了查询来证明这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 2015-10-29
    相关资源
    最近更新 更多