首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ArangoJs在ArangoDb图中存储文档?

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

Stack Overflow用户
提问于 2015-11-29 20:13:29
回答 2查看 991关注 0票数 4

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

  1. 用户
  2. 令牌

tokens顶点包含向users顶点中的一个用户发出的安全令牌。我有一个名为token_belongs_to的边缘定义,它将tokens连接到users

如何使用ArangoJs存储属于现有用户的新生成的令牌?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-30 12:09:47

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

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

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

代码语言:javascript
复制
var users = db.collection('users');
var tokens = db.collection('tokens');
var edges = db.edgeCollection('token_belongs_to');

或者如果您使用的是Graph:

代码语言:javascript
复制
var graph = db.graph('my_graph');
var users = graph.vertexCollection('users');
var tokens = graph.vertexCollection('tokens');
var edges = graph.edgeCollection('token_belongs_to');

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

如果您没有_id_key,您还可以通过其他一些唯一属性查找文档。例如,如果您有一个知道值的唯一属性email,您可以这样做:

代码语言:javascript
复制
users.firstExample({email: 'admin@example.com'})
.then(function (doc) {
  var userId = doc._id;
  // more code goes here
});

接下来,您需要创建令牌:

代码语言:javascript
复制
tokens.save(tokenData)
.then(function (meta) {
  var tokenId = meta._id;
  // more code goes here
});

一旦您拥有了userId和tokenId,就可以创建边界来定义两者之间的关系:

代码语言:javascript
复制
edges.save(edgeData, userId, tokenId)
.then(function (meta) {
  var edgeId = meta._id;
  // more code goes here
});

如果不想在边缘存储任何数据,可以用空对象代替edgeData,或者简单地将其写入如下:

代码语言:javascript
复制
edges.save({_from: userId, _to: tokenId})
.then(...);

所以完整的例子应该是这样的:

代码语言:javascript
复制
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);
});
票数 5
EN

Stack Overflow用户

发布于 2020-11-05 13:05:04

注意-语法变化:

边缘创造:

代码语言:javascript
复制
const { Database, CollectionType } = require('arangojs');

const db = new Database();
const collection = db.collection("collection_name");

if (!(await collection.exists())
  await collection.create({ type: CollectionType.EDGE_COLLECTION });

await collection.save({_from: 'from_id', _to: 'to_id'});

.edgecollection.html#create

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33987528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档