Graph ArangoDB将顶点和边复制到邻居
我试图复制一个顶点节点,并在ArangoDB中保留它的关系。我得到一个“数据修改后访问”错误(1579)。它不喜欢在源节点的边上迭代并在循环中插入边副本。这是有道理的,但我正在努力找出如何在一次交易中实现我想要的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
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的回答!这看起来能解决我的问题。我已经被其他事情淹没了,在我的项目中还没有回到这一点上。我会接受它作为现在的答案,如果我有任何问题,我会发布更新。