Как вернуть результаты массовой вставки? - PullRequest
0 голосов
/ 12 марта 2020

Как вернуть массив вновь вставленных документов? Я хочу выполнить массовую вставку из Java.

INSERT {
  text: @text0,
  createdAt: @createdAt0
} IN messages

LET result0 = { id: NEW._key, text: NEW.text, createdAt: NEW.createdAt }

INSERT {
  text: @text1,
  createdAt: @createdAt1
} IN messages

LET result1 = { id: NEW._key, text: NEW.text, createdAt: NEW.createdAt }

RETURN [result0, result1]

Есть ли лучший способ сбора результатов для каждой вставки, кроме определения новой переменной для сохранения результатов в ней?

1 Ответ

1 голос
/ 13 марта 2020

Этот запрос должен делать то, что вы хотите.

FOR d IN [
    {text:@text0, createdAt: @createdAt0}, {text:@text1, createdAt: @createdAt1}
]
INSERT d INTO abc
RETURN {
    id: NEW._id,
    text: d.text,
    createdAt: d.createdAt
}

Пример ответа от AQL:

[
  {
    "id": "abc/21971344",
    "text": "apple",
    "createdAt": 1584107091
  },
  {
    "id": "abc/21971345",
    "text": "banana",
    "createdAt": 1584108473
  }
]

Пока конечный пользователь не создает AQL, он должно быть хорошо, особенно если вы используете параметры.

Если вы когда-либо использовали продукт вне тестирования, я определенно рекомендую взглянуть на Foxx, так как он дает вам слой абстракции, размещенный (относительно) внутри база данных, которая, по крайней мере, вообще не дает потребителям выполнять запросы AQL, скорее, они просто общаются через конечные точки REST.

PS. Этот формат запроса также работает:

FOR d IN @messages
INSERT d INTO abc
RETURN {
    id: NEW._id,
    text: d.text,
    createdAt: d.createdAt
}

Где @messages равно

"messages": [
    {
        "text": "apple",
        "createdAt": 1584107091
    },
    {
        "text": "banana",
        "createdAt": 1584108473
    }
]
...