arangodb - 如何使用 ArangoJs 在 ArangoDb 图中存储文档?

标签 arangodb arangojs

我正在使用 nodejs 应用程序中最新版本的 ArangoDb 和 ArangoJs。我有以下两个顶点

  • 用户
  • 代币
  • tokens顶点包含向 users 中的用户之一发行的安全 token 。顶点。我有一个名为 token_belongs_to 的边定义连接 tokensusers
    如何使用 ArangoJs 存储属于现有用户的新生成的 token ?

    最佳答案

    我将假设您将 ArangoDB 2.7 与最新版本的 arangojs(在撰写本文时为 4.1)一起使用,因为自驱动程序的 3.x 版本以来 API 发生了一些变化。

    由于您没有提到使用 Graph API,最简单的方法是直接使用集合。但是,使用 Graph API 会增加一些好处,例如在删除任何顶点时会自动删除孤立边。

    首先,您需要获得对要使用的每个集合的引用:

    var users = db.collection('users');
    var tokens = db.collection('tokens');
    var edges = db.edgeCollection('token_belongs_to');
    

    或者,如果您使用的是图形 API:
    var graph = db.graph('my_graph');
    var users = graph.vertexCollection('users');
    var tokens = graph.vertexCollection('tokens');
    var edges = graph.edgeCollection('token_belongs_to');
    

    为了为现有用户创建 token ,您需要知道用户的 _id。文档的 _id 由集合名称( users )和文档的 _key (例如 12345678 )组成。

    如果您没有 _id_key,您还可以通过其他一些唯一属性查找文档。例如,如果您有一个知道其值的唯一属性 email,您可以这样做:
    users.firstExample({email: 'admin@example.com'})
    .then(function (doc) {
      var userId = doc._id;
      // more code goes here
    });
    

    接下来,您将要创建 token :
    tokens.save(tokenData)
    .then(function (meta) {
      var tokenId = meta._id;
      // more code goes here
    });
    

    获得 userId 和 tokenId 后,您可以创建边来定义两者之间的关系:
    edges.save(edgeData, userId, tokenId)
    .then(function (meta) {
      var edgeId = meta._id;
      // more code goes here
    });
    

    如果您不想在边缘存储任何数据,您可以用一个空对象替换 edgeData 或简单地将其写为:
    edges.save({_from: userId, _to: tokenId})
    .then(...);
    

    所以完整的例子会是这样的:
    var graph = db.graph('my_graph');
    var users = graph.vertexCollection('users');
    var tokens = graph.vertexCollection('tokens');
    var edges = graph.edgeCollection('token_belongs_to');
    
    Promise.all([
      users.firstExample({email: 'admin@example.com'}),
      tokens.save(tokenData)
    ])
    .then(function (args) {
      var userId = args[0]._id; // result from first promise
      var tokenId = args[1]._id; // result from second promise
      return edges.save({_from: userId, _to: tokenId});
    })
    .then(function (meta) {
      var edgeId = meta._id;
      // Edge has been created
    })
    .catch(function (err) {
      console.error('Something went wrong:', err.stack);
    });
    

    关于arangodb - 如何使用 ArangoJs 在 ArangoDb 图中存储文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33987528/

    相关文章:

    node.js - arangoDb + nodejs : db. useBasicAuth(...) 不是函数

    arangodb - 使用 AQL 迭代聚合结果返回预期平均值/总和值的空值

    arangodb 终止查询不起作用需要 ("org/arangodb/aql/queries").kill ("2418")

    arangodb - 如何使用 ArangoDB 转储所有数据库

    graph - ArangoDB,如何显示图表?

    node.js - 如何提高ArangoDB在负载(多个并发查询)下的性能?

    java - 如何在 ArangoDB 中存储图像?

    ArangoDB - 更新与替换

    ArangoDB 图形创建 API