Arangodb вставить несколько строк и с помощью UPSERT - PullRequest
1 голос
/ 10 марта 2019

как вставить несколько строк в arangodb с помощью UPSERT?Сборник содержит уникальный индекс, который предотвращает вставку дубликатов документов.множественная вставка прекрасно работает без уникального индекса, но как я могу обработать обновление / замену в множественной вставке с уникальным индексом?

, например:

INSERT [{doc1},{doc2},{doc3}]
IN collection

UPDATE {} // when duplicate per document

Обновление 1

SQL выглядит так:

INSERT INTO table(name, value)
VALUES('a', '1'), ('b', 2), ('c', 3)

ON DUPLICATE KEY UPDATE name=`value`

спасибо.

1 Ответ

2 голосов
/ 10 марта 2019

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.

...