如何使用ArangoJs在ArangoDb图形中存储文档?
我使用的是来自nodejs应用程序的最新版本的ArangoDb和ArangoJs。我有两个顶点如何使用ArangoJs在ArangoDb图形中存储文档?,arangodb,arangojs,Arangodb,Arangojs,我使用的是来自nodejs应用程序的最新版本的ArangoDb和ArangoJs。我有两个顶点 使用者 代币 tokensvertex包含向usersvertex中的一个用户颁发的安全令牌。我有一个名为token\u所属的边定义连接tokens到用户 如何使用ArangoJs存储属于现有用户的新生成令牌?我假设您使用的是ArangoDB 2.7和ArangoJs的最新版本(撰写本文时为4.1),因为自3.x版本的驱动程序发布以来,API发生了一些变化 正如您没有提到的,最简单的方法是直接使用集合
tokens
vertex包含向users
vertex中的一个用户颁发的安全令牌。我有一个名为token\u所属的边定义
连接tokens
到用户
如何使用ArangoJs存储属于现有用户的新生成令牌?我假设您使用的是ArangoDB 2.7和ArangoJs的最新版本(撰写本文时为4.1),因为自3.x版本的驱动程序发布以来,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');
为了为现有用户创建令牌,您需要知道用户的\u id
。文档的\u id
由文档的集合名称(用户
)和\u键
(例如12345678
)组成
如果您没有\u id
或\u键
,也可以通过其他一些唯一属性查找文档。例如,如果您有一个知道其值的唯一属性email
,则可以执行以下操作:
users.firstExample({email: 'admin@example.com'})
.then(function (doc) {
var userId = doc._id;
// more code goes here
});
接下来,您将要创建令牌:
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);
});
注意-语法更改: 边创建:
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'});