边缘集合未定义,直到使用_collections()操作

问题描述 投票:0回答:1

我正在使用ArangoDB 3.4.2,我有一个奇怪的问题,我无法解释......

我在arangosh中创建了一个图形(myGraph):

var graph_module = require('@arangodb/general-graph');

var myGraph = graph_module._create('mygraph');
myGraph._addVertexCollection('vertexes');
var edges = graph_module._relation('edges', ['vertexes'], ['vertexes']);
myGraph._extendEdgeDefinitions(edges);

vertexesedges分别作为顶点和边的集合。

现在,我创建两个顶点:

db.vertexes.save({"name": "A", "_key": "A"});
db.vertexes.save({"name": "B", "_key": "B"});

到现在为止还挺好。但是现在我尝试在两者之间创建边缘并且我失败了:

127.0.0.1:8529@myDB> db.edges.save("vertexes/A", "vertexes/B", {"name": "A-to-B"});
JavaScript exception: TypeError: Cannot read property 'save' of undefined
!db.edges.save("vertexes/A", "vertexes/B", {"name": "A-to-B"});
!        ^
stacktrace: TypeError: Cannot read property 'save' of undefined
    at <shell command>:1:9

似乎db.edges未定义:

127.0.0.1:8529@MyDB> console.log(db.edges)
2019-01-26T19:01:52Z [98311] INFO undefined

但现在,如果我运行db._collections()似乎db.edges被定义(奇怪!)

127.0.0.1:8529@MyDB> db._collections()
...
127.0.0.1:8529@MyDB> console.log(db.edges)
2019-01-26T19:02:58Z [98311] INFO [ArangoCollection 16807, "edges" (type edge, status loaded)]

在这一刻,db.edges.save(...)操作工作:

127.0.0.1:8529@MyDB> db.edges.save("vertexes/A", "vertexes/B", {"name": "A-to-B"});
{ 
  "_id" : "edges/16899", 
  "_key" : "16899", 
  "_rev" : "_YGsKKq2--_" 
}

为什么db.edges在第一个save()时未定义?为什么一个节目收集操作(我理解为只读)是定义它?也许我做错了什么?

graph arangodb
1个回答
1
投票

执行db.edges.save()时,访问内部缓存。如果此缓存清除,则执行db.edges.save()可以保存边缘。由于db._collections()重置此缓存,因此可以在之后运行该命令。但是,如果此缓存不清楚,则会在您观察到时抛出错误。

正确而安全的方法是通过db._collection("collection-name")访问该集合。因此,您可以使用以下命令在edges集合中保存边:

db._collection("edges").save("vertexes/A", "vertexes/B", {"name": "A-to-B"});
© www.soinside.com 2019 - 2024. All rights reserved.