在ArangoDB边缘集合中为多个路径属性创建唯一索引,包括_from和_to属性

在ArangoDB边缘集合中为多个路径属性创建唯一索引,包括_from和_to属性,arangodb,Arangodb,我正在尝试为边集合设置唯一约束,以便在两个给定节点之间只能创建一条特定类型的边。问题是,在创建索引时,我似乎不能使用\u from和\u to属性作为路径属性。到目前为止,我所尝试的: db._collection('edges').ensureUniqueConstraint('_from', '_to', 'type'); 我得到以下错误: [ArangoError 10: bad parameter] 在创建之前,我不想检查两个节点之间是否存在某个边类型 有什么提示吗?目前无法在内部属

我正在尝试为边集合设置唯一约束,以便在两个给定节点之间只能创建一条特定类型的边。问题是,在创建索引时,我似乎不能使用
\u from
\u to
属性作为路径属性。到目前为止,我所尝试的:

db._collection('edges').ensureUniqueConstraint('_from', '_to', 'type');
我得到以下错误:

[ArangoError 10: bad parameter]
在创建之前,我不想检查两个节点之间是否存在某个边类型


有什么提示吗?

目前无法在内部属性(如_key、_id、_rev、_from或_to)上创建二级索引。我们希望在ArangoDB的未来版本中允许这样做,但这将是一个巨大的代码更改

实现所需结果的唯一方法是在保存的边中创建一个额外属性,并将“_-from”、“_-to”和“type”的组合放入其中。我认为这些值应该在edge创建时就已经知道了

因此,与其保留这样的优势

db.edges.save(_from, _to, { type: type, other: ... });
应该是这样的:

// create a unique index on attribute "unique"
db._collection("edges").ensureUniqueConstraint("unique");

// create a variable "unique" which contains the values of _from and _to and type
var unique = _from + "-" + _to + "-" + String(type);

// now save the edge, using the "unique" attribute
db.edges.save(_from, _to, { type: type, unique: unique, other: ... });

这是一个解决方法,但它应该可以解决这个特定问题。

由于ArangoDB 3.0,您可以在
\u from
\u to
字段上使用唯一的哈希索引

db.edgeCollectionName.ensureIndex({type:“hash”,字段:[“\u-from”,“\u-to”],唯一:true})


当一个a->B关系存在时,将不会创建另一个a->B关系B->A仍然可以创建。

感谢您指出这一点(希望确保此功能尚未可用)。它应该会成功的,谢谢!在创建哈希之前,您可以对A和B进行排序,使其同时适用于A->B和B->A。