Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graph ArangoDB将顶点和边复制到邻居_Graph_Deep Copy_Arangodb_Aql - Fatal编程技术网

Graph ArangoDB将顶点和边复制到邻居

Graph ArangoDB将顶点和边复制到邻居,graph,deep-copy,arangodb,aql,Graph,Deep Copy,Arangodb,Aql,我试图复制一个顶点节点,并在ArangoDB中保留它的关系。我得到一个“数据修改后访问”错误(1579)。它不喜欢在源节点的边上迭代并在循环中插入边副本。这是有道理的,但我正在努力找出如何在一次交易中实现我想要的 var query = arangojs.aqlQuery` let tmpNode = (FOR v IN vertices FILTER v._id == ${nodeId} RETURN v)[0] let nodeCopy = UNSET(tmp

我试图复制一个顶点节点,并在ArangoDB中保留它的关系。我得到一个“数据修改后访问”错误(1579)。它不喜欢在源节点的边上迭代并在循环中插入边副本。这是有道理的,但我正在努力找出如何在一次交易中实现我想要的

var query = arangojs.aqlQuery`
        let tmpNode = (FOR v IN vertices FILTER v._id == ${nodeId} RETURN v)[0]
        let nodeCopy = UNSET(tmpNode, '_id', '_key', '_rev')
        let nodeCopyId = (INSERT nodeCopy IN 'vertices' RETURN NEW._id)[0]
        FOR e IN GRAPH_EDGES('g', ${nodeId}, {'includeData': true, 'maxDepth': 1})
            let tmpEdge = UNSET(e, '_id', '_key', '_rev')
            let edgeCopy = MERGE(tmpEdge, {'_from': nodeCopyId})
            INSERT edgeCopy IN 'edges'
`;
这个问题是——让我用类似的方式来解释

我们应该努力解决这个问题

我们将复制
Alice
成为具有类似关系的
Sally

let alice=DOCUMENT("persons/alice")
let newSally=UNSET(MERGE(alice, {_key: "sally", name: "Sally"}), '_id')
let r=(for v,e in 1..1 ANY alice GRAPH "knows_graph"
          LET me = UNSET(e, "_id",  "_key", "_rev")
          LET newEdge = (me._to == "persons/alice") ?
              MERGE(me, {_to:   "persons/sally"}) :
              MERGE(me, {_from: "persons/sally"})
          INSERT newEdge IN knows RETURN newEdge)
INSERT newSally IN persons RETURN newSally
因此,我们首先加载
Alice
。我们
UNSET
ArangoDB的属性应该自行设置。对于
Alice
我们将必须是uniq的属性更改为uniq,因此之后我们有一个
Sally

然后我们打开一个子查询来遍历Alice的
任何
一级关系。在此子方程中,我们要复制边-
e
。我们需要再次取消设置ArangoDB自动生成的文档属性。我们需要找出
\u from
\u to
的哪一侧指向
Alice
,并将其重新定位到
Sally


最后插入的
Sally
必须在子查询之外,否则此语句将尝试在我们遍历的每条边上插入一个Sally。我们无法在查询前插入Saly,因为您已经发现了这一点-插入后不允许进行后续回迁。

答案是否满足您的需要?如果是,您能将其标记为已接受吗?如果没有,还缺什么?谢谢@dothebart的回答!这看起来能解决我的问题。我已经被其他事情淹没了,在我的项目中还没有回到这一点上。我会接受它作为现在的答案,如果我有任何问题,我会发布更新。