Повторяющиеся документы вставляются в коллекцию ребер

Я использую драйвер узла 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" самостоятельно, либо изменить логику своего кода, чтобы проверить, присутствует ли запись в БД или нет.

Другие вопросы по тегам