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

Я использую драйвер узла arangodb версии 6 для вставки отношений между двумя вершинами следующим образом.

db.collection("starks").save({ 
    _from: "Starks/Lyanna-Stark", 
    _to: "Starks/Ned-Stark", 
    type: "married" 
});

Это вставляет отношение married между Starks/Lyanna-Stark и Starks/Ned-Stark в базу данных. Но когда я запускаю этот запрос дважды, он вставляет его два раза с другим ключом отношения. Я хочу избежать этого, поскольку для одного отношения должна присутствовать только одна запись. Как я могу этого добиться?


person Dipti    schedule 18.08.2018    source источник


Ответы (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#ensure-uniqueness-of-relations-in-edge-collections

person molecule    schedule 18.08.2018
comment
Просто исправление, если имя коллекции relations, тогда запрос также должен быть db.relations.ensureIndex({ ... }); : P - person Saif Ali Khan; 18.08.2018

Вы столкнулись с этой проблемой из-за того простого факта, что Arango создает новый идентификатор каждый раз, когда вы сохраняете объект. Уникальность пограничной записи достигается ключом «_key».

Для этого вы можете либо предоставить ключ «_key» самостоятельно, либо изменить логику своего кода, чтобы проверить, присутствует ли уже запись в базе данных или нет.

person Nicolas El Khoury    schedule 29.09.2018