5

特定の 2 つのノード間で特定のタイプのエッジを 1 つだけ作成できるように、エッジ コレクションに一意の制約を設定しようとしています。_from問題は、インデックスを作成するときに_to属性をパス属性として使用できないように見えることです。私がこれまでに試したこと:

db._collection('edges').ensureUniqueConstraint('_from', '_to', 'type');

次のエラーが表示されます。

[ArangoError 10: bad parameter]

作成する前に、2 つのノード間に特定のエッジ タイプが存在するかどうかを確認したくありません。

ヒントはありますか?

4

2 に答える 2

5

現在、_key、_id、_rev、_from、_to などの内部属性にセカンダリ インデックスを作成することはできません。ArangoDB の将来のバージョンでこれを許可したいと考えていますが、これは大規模なコード変更になります。

目的の結果を得る唯一の方法は、エッジに追加の属性を作成して保存し、「_from」、「_to」、および「type」の組み合わせをそこに入れることです。これらの値は、エッジの作成時にすでにわかっているはずだと思います。

したがって、このようなエッジを保存する代わりに

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: ... });

これは回避策ですが、その特定の問題を解決する必要があります。

于 2014-08-01T09:53:41.767 に答える