Как насчет глядя на команду UPSERT
, и только дать ему инструкции по INSERT
части команды и ничего для UPDATE
. Таким образом, это будет выполняться только в том случае, если оно не существует.
https://docs.arangodb.com/3.0.10/AQL/Operations/Upsert.html
Ниже приведен пример того, что используют:
UPSERT {
username: @username
}
INSERT {
username: @username,
fullname: @fullname,
verified: false
}
UPDATE {
}
IN Users
RETURN {
user: NEW
}
UPSERT
Команда состоит из трех частей к нему.
Первый - это сопоставитель, он определяет, существует ли документ или нет. В этом случае сравнитель { username: @username }
. Он использует это для поиска коллекции Users
, чтобы узнать, есть ли совпадение или нет.
Если нет совпадения, он выполняет команду INSERT
.
Если есть соответствие, он выполняет команду UPDATE
.
В этом случае мы были сложными и не предоставляли ничего для команды UPDATE
, поэтому он ничего не обновит, если он существует, он будет только вставляться, если он не существует.
Затем блок INSERT
показывает ключи/значения, которые он вставляет, если запись не найдена.
В этом случае он также устанавливается в false
, поскольку новый пользователь, который только что был создан, не проверен. Ответственность другой команды в другом месте приложения заключается в том, чтобы преобразовать этот флаг в true
.
Также обратите внимание на запись RETURN
, она ссылается на NEW
, и вы также можете обратиться к вещанию под названием OLD
, если необходимо.
Это внутренние значения возврата, предоставляемые командой UPSERT
, и они ссылаются на две версии документа, на которые были сделаны ссылки.
NEW
всегда заполнен, он содержит самую последнюю версию документа, независимо от того, было сделано обновление или нет.
OLD
содержит старую версию документа, прежде чем он будет обновлен новыми значениями. Если документ не обновляется, он возвращает null, поэтому в этом случае он всегда будет пустым, поскольку обновления не будут выполняться.
И да, это выполняется точно так же, как команда стиля IF NOT EXISTS
на других языках баз данных. Если компаратор не соответствует, он вставляет новую запись, если компаратор соответствует, он ничего не делает!
Я надеюсь, что это поможет!
Возможно ли, что вы можете создать образец запроса. Это не сработало для меня, без опций. – ich
Спасибо, моя репутация должна быть низкой, чтобы возвысить :), когда я смогу это сделать, я сделаю – ich