ArangoDB 如何返回大容量插入的结果?

nimxete2  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(152)

如何返回新插入文档的数组?我想从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]

除了定义一个新变量来保存结果之外,是否有更好的方法来收集每次插入的结果?

xzv2uavs

xzv2uavs1#

这个查询应该可以完成您想要的工作。

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
    }
]

相关问题