代码之家  ›  专栏  ›  技术社区  ›  fgalan

使用_collections()操作之前未定义边缘集合

  •  0
  • fgalan  · 技术社区  · 6 年前

    我用的是Arangodb3.4.2,我有一个奇怪的问题,我无法解释…

    我创建了一个图表( 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);
    

    存在 vertexes edges 顶点和边的集合。

    现在,我创建两个顶点:

    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() 似乎 边缘 被定义(奇怪!)

    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--_" 
    }
    

    为什么? 边缘 在第一个save()中是否未定义?为什么要定义一个ShowCollections操作(我理解它是只读的)?也许我做错了什么?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Maximilian Kernbach    6 年前

    执行时 db.edges.save() 访问内部缓存。如果清除此缓存,则执行 Dava. 用于保存边。自从 db._collections() 重置此缓存,之后可以运行命令。但是,如果不清除此缓存,则会在您观察到的情况下引发错误。

    正确和安全的方法是通过 db._collection("collection-name") . 因此,可以使用以下命令在 edges 收藏:

    db._collection("edges").save("vertexes/A", "vertexes/B", {"name": "A-to-B"});