вставить и вернуть документ в одном AQL-запросе

Когда я вставляю документ в коллекцию с помощью AQL, он возвращает пустой список.

arangosh [test]> db._query('INSERT @document INTO vertices', {document: {name: "bar"}}).toArray()
[ ]

Есть ли способ вставить документ и вернуть весь документ с помощью одного запроса AQL?

Я надеюсь получить обратно:

{
  "_id": "vertices/641272433780",
  "_key": "641272433780",
  "_rev": "641272433780",
  "name": "bar"
}

person mikewilliamson    schedule 05.01.2015    source источник
comment
В настоящее время мы работаем над этим (возвращение целых документов из операций изменения данных AQL), ​​но эта функция еще не завершена. Я могу размещать здесь сообщения, когда будут новости.   -  person stj    schedule 06.01.2015
comment
Рад слышать! Есть ли планы разрешить операции изменения данных в подзапросах?   -  person mikewilliamson    schedule 07.01.2015
comment
На данный момент нет, так как это потребует серьезных изменений в AQL.   -  person stj    schedule 08.01.2015


Ответы (2)


Как только функция будет реализована, она будет выглядеть так:

INSERT expression IN|INTO collection [ OPTIONS expression ] WITH NEW INTO variable RETURN variable;

REMOVE expression IN|INTO collection [ OPTIONS expression ] WITH OLD INTO variable RETURN variable;

UPDATE expression IN|INTO collection [ OPTIONS expression ] WITH OLD|NEW INTO variable RETURN variable
UPDATE expression WITH expression IN|INTO collection [ OPTIONS expression ] WITH OLD|NEW INTO variable RETURN variable

`

person dothebart    schedule 06.01.2015
comment
Интересно, можно ли было бы использовать псевдопеременную BOTH, чтобы вернуть старое и новое ... - person CodeManX; 12.01.2015
comment
Похоже, это было реализовано в ArangoDB 2.4: jsteemann.github.io/blog/2015/01/13/ - person mikewilliamson; 17.01.2015

Это возможно, начиная с версии ArangoDB 2.4. Для возврата созданного документа исходный запрос

INSERT @document INTO vertices

должен быть изменен на

INSERT @document INTO vertices LET result = NEW RETURN result

Это также будет работать для многодокументных INSERT, а также для UPDATE / REPLACE и REMOVE. Следующие цитаты из документации 2.4 описывают синтаксис:

Чтобы вернуть документы из запроса на изменение данных, за оператором INSERT, REMOVE, UPDATE или REPLACE должен сразу же следовать оператор LET, который присваивает псевдо-значение NEW или OLD пользовательской переменной. За оператором LET должен следовать оператор RETURN, который возвращает переменную, введенную LET.

NEW относится к вставленной или измененной редакции документа, а OLD относится к редакции документа перед обновлением или удалением. Операторы INSERT могут ссылаться только на псевдо-значение NEW, а операции REMOVE - только на OLD. ОБНОВЛЕНИЕ и ЗАМЕНА могут относиться к любому из них.

person stj    schedule 07.02.2015