【发布时间】:2020-03-13 21:48:08
【问题描述】:
如何返回新插入的文档数组?我想从 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]
除了定义一个新变量将结果保存在其中之外,还有更好的方法来收集每个插入的结果吗?
【问题讨论】:
-
您希望通过单个命令插入多少个文档?您是否考虑过在 ArangoDB 中使用 Foxx 微服务来帮助您做到这一点?对于真正的批量插入,返回新插入的文档是不常见的,因为它们通常针对速度和快速加载数据进行了优化。但是,如果您要添加较小的可变长度文档突发,我会考虑设置一个 Foxx 端点来为您完成。这样做的好处是您可以实现更多的数据库模式保护并添加额外的业务逻辑。
-
@DavidThomas 不应超过 10 条消息。我想通过仅使用 AQL 来保持简单,这样我可以轻松地在 Arango 管理界面中测试查询。
-
我刚才回答了一个问题,在this question 我有一个示例,说明如何通过命令行工具 arangosh 将文档批量保存到集合中。这对你有用吗?请记住,文档的 _key 属性是在 INSERT 时随机生成的,但它会递增,因此您可以在 UI 中查询 _key 大于给定数字的情况,以查看新插入的文档。
-
将这种技术与 arangosh 结合使用,您甚至可以将命令保存在 js 文件中并运行它们,这是批量加载初始文档、创建、删除数据库、修改索引等任何您需要的超级简单方法。
-
@DavidThomas 我正在从 java 执行 AQL 查询。 java sdk 有一个
Collection.insertDocuments函数,它接受一个文档列表(它可能在你提到的下面使用FOXX)。唯一的问题是它也返回 _id、_key、_rev 字段。没有选项可以重写字段。我想添加将包含 _key 值的id字段。我想我可以只处理作为结果返回的返回文档列表并删除我不需要的字段并将id字段添加到其中。