ArangoDB поддерживает работу UPSERT: https://docs.arangodb.com/3.3/AQL/Operations/Upsert.html
Из документации ArangoDB:
При использовании варианта UPDATE операции upsert найденный документ будет частично обновлен, то есть будут обновлены или добавлены только атрибуты, указанные в updateExpression. При использовании варианта upsert REPLACE существующие документы будут заменены контекстами updateExpression.
Вы можете использовать UPSERT для обновления / замены / вставки нескольких записей следующим образом:
Давайте вставим несколько примеров документов в ваш collection
с уникальным хеш-индексом для атрибута name
:
FOR doc in [
{ "name": "Doc 1", "value": 1 },
{ "name": "Doc 2", "value": 1 },
{ "name": "Doc 3", "value": 1 }]
INSERT doc IN collection
Теперь, если вы хотите выполнить пакетную загрузку, вы можете запустить следующий AQL:
FOR doc in [
{ "name": "Doc 2", "value": 2 },
{ "name": "Doc 3", "value": 2 },
{ "name": "Doc 4", "value": 1 }
]
UPSERT { "name": doc.name }
INSERT doc
UPDATE { "value": doc.value } in collection
Приведенный выше запрос AQL вставляет один новый документ Doc 4
и обновляет атрибут значения для Doc 2
и Doc 3
.