【ArangoDB教程11】 如何执行AQL查询点击此标题看全文
文章目录
- 如何执行AQL查询
- 在arangosh中执行AQL查询
-
- 使用 `db._query()`
- 使用 `db._query()` 绑定参数
- 使用 ES6 模板字符串
- 统计信息和额外信息
- 主要查询选项
- 查询子选项
-
- fullCount
- failOnWarning
- cache
- fillBlockCache
- profile
- maxWarningCount
- maxNumberOfPlans
- optimizer
- allowRetry
- stream
- maxRuntime
- maxDNFConditionMembers
- maxNodesPerCallstack
- maxTransactionSize
- intermediateCommitSize
- intermediateCommitCount
- spillOverThresholdMemoryUsage
- allowDirtyReads
- skipInaccessibleCollections
- satelliteSyncWait
- 使用db._createStatement()(ArangoStatement)
- 在ArangoDB Web界面中执行AQL查询
如何执行AQL查询
可以通过以下几种方式来调用AQL查询:
1. 通过Web界面。
2. 使用JavaScript API的db对象,例如在arangosh中或在Foxx服务中。
3. 通过原始REST HTTP API。
在底层,这些调用都会使用服务器的HTTP API,但是Web界面和db对象会隐藏底层通信细节,因此更易于使用。
ArangoDB的Web界面有一个专门的QUERIES部分,您可以在其中运行AQL查询。
您可以使用ArangoDB Shell中的db._query()和db._createStatement()方法来运行AQL查询。本章还介绍了如何在arangosh中使用绑定参数、统计信息、计数和游标。
如果您使用Foxx微服务,请参阅如何编写数据库查询以获取包含模板字符串的示例。
如果您想通过HTTP REST API从应用程序中运行AQL查询,请参阅AQL查询的完整API描述。
在arangosh中执行AQL查询
您可以使用 db._query()
和 db._createStatement()
方法在 ArangoDB shell 中执行 AQL 查询。本章还介绍了如何使用绑定参数、计数、统计信息和游标。
使用 db._query()
db._query(<queryString>) → cursor
您可以使用 db
对象的 _query()
方法来执行查询。这将在当前选择的数据库上下文中运行指定的查询,并返回游标中的查询结果。您可以使用其 toArray()
方法打印游标的结果:
var coll = db._create("mycollection")
var doc = db.mycollection.save({
_key: "testKey", Hello : "World" })
db._query('FOR my IN mycollection RETURN my._key').toArray()
使用 db._query()
绑定参数
db._query(<queryString>, <bindVars>) → cursor
要将绑定参数传递到查询中,可以在调用 _query()
方法时指定第二个参数:
db._query('FOR c IN @@collection FILTER c._key == @key RETURN c._key', {
'@collection': 'mycollection',
'key': 'testKey'
}).toArray();
使用 ES6 模板字符串
aql`<queryTemplateString>`
也可以使用 ES6 模板字符串生成 AQL 查询。有一个名为 aql
的模板字符串生成函数。
以下示例演示了模板字符串函数生成的内容:
var key = 'testKey';
aql`FOR c IN mycollection FILTER c._key == ${
key} RETURN c._key`
下一个示例直接使用生成的结果来执行查询:
var key = 'testKey';
db._query(
aql`FOR c IN mycollection FILTER c._key == ${
key} RETURN c._key`
).toArray();
使用 aql
模板字符串生成的查询中可以使用任意 JavaScript 表达式。集合对象将自动处理:
var key = 'testKey';
db._query(aql`FOR doc IN ${
db.mycollection } RETURN doc`).toArray();
注意:除非 AQL 查询包含顶层的 RETURN 操作,否则数据修改型 AQL 查询通常不会返回结果。没有 RETURN 操作时,toArray()
方法将返回一个空数组。
统计信息和额外信息
cursor.getExtra() → queryInfo
您可以始终使用 getExtra()
方法检索查询的统计信息:
db._query(`
FOR i IN 1..100
INSERT { _key: CONCAT('test', TO_STRING(i)) } INTO mycollection
`).getExtra();
统计信息的含义在查询统计信息中有描述。
查询警告也在此处报告。如果您在 shell 上设计查询,请务必检查警告。
主要查询选项
db._query(<queryString>, <bindVars>, <mainOptions>,