我正在尝试复制顶点节点并在ArangoDB中保留它的关系。我正在获得“数据修改后访问”错误(1579)。当我遍历源节点的边缘并在循环中插入边缘副本时,它不喜欢它。这是有道理的,但我正在努力弄清楚如何在一次交易中做我想要的事情。
#include <iostream>
#include <algorithm>
#include <vector>
int main() {
using namespace std;
vector<double> x = {1.8, 2.4, 3.3, 4.2, 5.6,7.9, 8.5, 9.3};
vector<double> y = {0.5, 0.98, 1.8, 3.1, 5.6, 6.6, 9.3, 9.3, 9.5};
vector<bool> z(y.size());
for (int i = 0; i != y.size(); ++i)
z[i] = binary_search(x.begin(), x.end(), y[i]);
for (vector<bool>::const_iterator i = z.begin(); i != z.end(); ++i)
cout << *i << " ";
return 0;
}
答案 0 :(得分:3)
这个问题是somewhat similar to 'In AQL how to re-parent a vertex' - 所以让我以类似的方式解释这个问题。
应该{{3}}来解决这个问题。
我们会将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的第一级关系ANY
。在这个子查询中,我们想要复制边缘 - e
。我们需要再次UNSET
必须由ArangoDB自动生成的文档属性。我们需要找出_from
和_to
的哪一侧指向Alice
并将其重新定位到Sally
。
Sally
的最终插入必须在子查询之外,否则此语句将尝试在每个遍历的边缘插入一个Sally。我们无法在查询前面插入Saly - 在插入后不允许后续提取。