Повторяющиеся документы вставляются в коллекцию ребер
Я использую драйвер узла 6 версии arangodb для вставки отношений между двумя вершинами следующим образом.
db.collection("starks").save({
_from: "Starks/Lyanna-Stark",
_to: "Starks/Ned-Stark",
type: "married"
});
Это вставляет отношение married
между Starks/Lyanna-Stark
а также Starks/Ned-Stark
в базу данных. Но когда я запускаю этот запрос дважды, он вставляется два раза с другим ключом отношения. Я хочу избежать этого, поскольку для одного отношения должна присутствовать только одна запись. Как мне этого добиться?
2 ответа
Просто создайте уникальный индекс для всех отношений, которые вы создаете. Например, если имя вашей коллекции отношений relations
, затем выполните этот запрос, чтобы создать комбинацию "_from"
, "_to"
, "type"
как уникальный
db.relations.ensureIndex({
type: "hash",
fields: [ "_from", "_to", "type" ],
unique: true
});
Вот ссылка для справки https://docs.arangodb.com/3.0/Manual/Indexing/Hash.html
Вы столкнулись с этой проблемой из-за того простого факта, что Arango создает новый идентификатор при каждом сохранении объекта. Уникальность граничной записи достигается клавишей "_key".
Для этого вы можете либо предоставить ключ "_key" самостоятельно, либо изменить логику своего кода, чтобы проверить, присутствует ли запись в БД или нет.