mirror of https://gitee.com/bigwinds/arangodb
Merge branch 'devel' of github.com:arangodb/arangodb into devel
This commit is contained in:
commit
c78cba9bfe
|
@ -1,102 +0,0 @@
|
|||
!CHAPTER Collection-based queries
|
||||
|
||||
Normally you would want to run queries on data stored in collections. This section
|
||||
will provide several examples for that.
|
||||
|
||||
!SUBSECTION Example data
|
||||
|
||||
Some of the following example queries are executed on a collection *users*
|
||||
with the following initial data:
|
||||
|
||||
```js
|
||||
[
|
||||
{ "id" : 100, "name" : "John", "age" : 37, "active" : true, "gender" : "m" },
|
||||
{ "id" : 101, "name" : "Fred", "age" : 36, "active" : true, "gender" : "m" },
|
||||
{ "id" : 102, "name" : "Jacob", "age" : 35, "active" : false, "gender" : "m" },
|
||||
{ "id" : 103, "name" : "Ethan", "age" : 34, "active" : false, "gender" : "m" },
|
||||
{ "id" : 104, "name" : "Michael", "age" : 33, "active" : true, "gender" : "m" },
|
||||
{ "id" : 105, "name" : "Alexander", "age" : 32, "active" : true, "gender" : "m" },
|
||||
{ "id" : 106, "name" : "Daniel", "age" : 31, "active" : true, "gender" : "m" },
|
||||
{ "id" : 107, "name" : "Anthony", "age" : 30, "active" : true, "gender" : "m" },
|
||||
{ "id" : 108, "name" : "Jim", "age" : 29, "active" : true, "gender" : "m" },
|
||||
{ "id" : 109, "name" : "Diego", "age" : 28, "active" : true, "gender" : "m" },
|
||||
{ "id" : 200, "name" : "Sophia", "age" : 37, "active" : true, "gender" : "f" },
|
||||
{ "id" : 201, "name" : "Emma", "age" : 36, "active" : true, "gender" : "f" },
|
||||
{ "id" : 202, "name" : "Olivia", "age" : 35, "active" : false, "gender" : "f" },
|
||||
{ "id" : 203, "name" : "Madison", "age" : 34, "active" : true, "gender": "f" },
|
||||
{ "id" : 204, "name" : "Chloe", "age" : 33, "active" : true, "gender" : "f" },
|
||||
{ "id" : 205, "name" : "Eva", "age" : 32, "active" : false, "gender" : "f" },
|
||||
{ "id" : 206, "name" : "Abigail", "age" : 31, "active" : true, "gender" : "f" },
|
||||
{ "id" : 207, "name" : "Isabella", "age" : 30, "active" : true, "gender" : "f" },
|
||||
{ "id" : 208, "name" : "Mary", "age" : 29, "active" : true, "gender" : "f" },
|
||||
{ "id" : 209, "name" : "Mariah", "age" : 28, "active" : true, "gender" : "f" }
|
||||
]
|
||||
```
|
||||
|
||||
For some of the examples, we'll also use a collection *relations* to store
|
||||
relationships between users. The example data for *relations* are as follows:
|
||||
|
||||
```js
|
||||
[
|
||||
{ "from" : 209, "to" : 205, "type" : "friend" },
|
||||
{ "from" : 206, "to" : 108, "type" : "friend" },
|
||||
{ "from" : 202, "to" : 204, "type" : "friend" },
|
||||
{ "from" : 200, "to" : 100, "type" : "friend" },
|
||||
{ "from" : 205, "to" : 101, "type" : "friend" },
|
||||
{ "from" : 209, "to" : 203, "type" : "friend" },
|
||||
{ "from" : 200, "to" : 203, "type" : "friend" },
|
||||
{ "from" : 100, "to" : 208, "type" : "friend" },
|
||||
{ "from" : 101, "to" : 209, "type" : "friend" },
|
||||
{ "from" : 206, "to" : 102, "type" : "friend" },
|
||||
{ "from" : 104, "to" : 100, "type" : "friend" },
|
||||
{ "from" : 104, "to" : 108, "type" : "friend" },
|
||||
{ "from" : 108, "to" : 209, "type" : "friend" },
|
||||
{ "from" : 206, "to" : 106, "type" : "friend" },
|
||||
{ "from" : 204, "to" : 105, "type" : "friend" },
|
||||
{ "from" : 208, "to" : 207, "type" : "friend" },
|
||||
{ "from" : 102, "to" : 108, "type" : "friend" },
|
||||
{ "from" : 207, "to" : 203, "type" : "friend" },
|
||||
{ "from" : 203, "to" : 106, "type" : "friend" },
|
||||
{ "from" : 202, "to" : 108, "type" : "friend" },
|
||||
{ "from" : 201, "to" : 203, "type" : "friend" },
|
||||
{ "from" : 105, "to" : 100, "type" : "friend" },
|
||||
{ "from" : 100, "to" : 109, "type" : "friend" },
|
||||
{ "from" : 207, "to" : 109, "type" : "friend" },
|
||||
{ "from" : 103, "to" : 203, "type" : "friend" },
|
||||
{ "from" : 208, "to" : 104, "type" : "friend" },
|
||||
{ "from" : 105, "to" : 104, "type" : "friend" },
|
||||
{ "from" : 103, "to" : 208, "type" : "friend" },
|
||||
{ "from" : 203, "to" : 107, "type" : "boyfriend" },
|
||||
{ "from" : 107, "to" : 203, "type" : "girlfriend" },
|
||||
{ "from" : 208, "to" : 109, "type" : "boyfriend" },
|
||||
{ "from" : 109, "to" : 208, "type" : "girlfriend" },
|
||||
{ "from" : 106, "to" : 205, "type" : "girlfriend" },
|
||||
{ "from" : 205, "to" : 106, "type" : "boyfriend" },
|
||||
{ "from" : 103, "to" : 209, "type" : "girlfriend" },
|
||||
{ "from" : 209, "to" : 103, "type" : "boyfriend" },
|
||||
{ "from" : 201, "to" : 102, "type" : "boyfriend" },
|
||||
{ "from" : 102, "to" : 201, "type" : "girlfriend" },
|
||||
{ "from" : 206, "to" : 100, "type" : "boyfriend" },
|
||||
{ "from" : 100, "to" : 206, "type" : "girlfriend" }
|
||||
]
|
||||
```
|
||||
|
||||
!SUBSECTION Things to consider when running queries on collections
|
||||
|
||||
Note that all documents created in the two collections will automatically get the
|
||||
following server-generated attributes:
|
||||
|
||||
* *_id*: A unique id, consisting of [collection name](../Glossary/README.md#collection-name) and a server-side sequence value
|
||||
* *_key*: The server sequence value
|
||||
* *_rev*: The document's revision id
|
||||
|
||||
Whenever you run queries on the documents in the two collections, don't be surprised if
|
||||
these additional attributes are returned as well.
|
||||
|
||||
Please also note that with real-world data, you might want to create additional
|
||||
indexes on the data (left out here for brevity). Adding indexes on attributes that are
|
||||
used in *FILTER* statements may considerably speed up queries. Furthermore, instead of
|
||||
using attributes such as *id*, *from* and *to*, you might want to use the built-in
|
||||
*_id*, *_from* and *_to* attributes. Finally, [edge collection](../Glossary/README.md#edge-collection)s provide a nice way of
|
||||
establishing references / links between documents. These features have been left out here
|
||||
for brevity as well.
|
|
@ -0,0 +1,39 @@
|
|||
!CHAPTER Queries without collections
|
||||
|
||||
|
||||
Following is a query that returns a string value. The result string is contained in an array
|
||||
because the result of every valid query is an array:
|
||||
|
||||
```js
|
||||
RETURN "this will be returned"
|
||||
[
|
||||
"this will be returned"
|
||||
]
|
||||
```
|
||||
|
||||
Here is a query that creates the cross products of two arrays and runs a projection
|
||||
on it, using a few of AQL's built-in functions:
|
||||
|
||||
```js
|
||||
FOR year in [ 2011, 2012, 2013 ]
|
||||
FOR quarter IN [ 1, 2, 3, 4 ]
|
||||
RETURN {
|
||||
"y" : "year",
|
||||
"q" : quarter,
|
||||
"nice" : CONCAT(TO_STRING(quarter), "/", TO_STRING(year))
|
||||
}
|
||||
[
|
||||
{ "y" : "year", "q" : 1, "nice" : "1/2011" },
|
||||
{ "y" : "year", "q" : 2, "nice" : "2/2011" },
|
||||
{ "y" : "year", "q" : 3, "nice" : "3/2011" },
|
||||
{ "y" : "year", "q" : 4, "nice" : "4/2011" },
|
||||
{ "y" : "year", "q" : 1, "nice" : "1/2012" },
|
||||
{ "y" : "year", "q" : 2, "nice" : "2/2012" },
|
||||
{ "y" : "year", "q" : 3, "nice" : "3/2012" },
|
||||
{ "y" : "year", "q" : 4, "nice" : "4/2012" },
|
||||
{ "y" : "year", "q" : 1, "nice" : "1/2013" },
|
||||
{ "y" : "year", "q" : 2, "nice" : "2/2013" },
|
||||
{ "y" : "year", "q" : 3, "nice" : "3/2013" },
|
||||
{ "y" : "year", "q" : 4, "nice" : "4/2013" }
|
||||
]
|
||||
```
|
|
@ -1,43 +1,112 @@
|
|||
!CHAPTER Usual Query Patterns Examples
|
||||
|
||||
This page contains some examples how to write queries in AQL. For better
|
||||
Those pages contain some common query patterns with examples. For better
|
||||
understandability the query results are also included directly below each query.
|
||||
|
||||
!SECTION Simple queries
|
||||
Normally you would want to run queries on data stored in collections. This section
|
||||
will provide several examples for that.
|
||||
|
||||
Following is a query that returns a string value. The result string is contained in an array
|
||||
because the result of every valid query is an array:
|
||||
Some of the following example queries are executed on a collection 'users' with the data provided here below.
|
||||
|
||||
|
||||
!SUBSECTION Things to consider when running queries on collections
|
||||
|
||||
Note that all documents created in any collections will automatically get the
|
||||
following server-generated attributes:
|
||||
|
||||
* *_id*: A unique id, consisting of [collection name](../Glossary/README.md#collection-name) and a server-side sequence value
|
||||
* *_key*: The server sequence value
|
||||
* *_rev*: The document's revision id
|
||||
|
||||
Whenever you run queries on the documents in the two collections, don't be surprised if
|
||||
these additional attributes are returned as well.
|
||||
|
||||
Please also note that with real-world data, you might want to create additional
|
||||
indexes on the data (left out here for brevity). Adding indexes on attributes that are
|
||||
used in *FILTER* statements may considerably speed up queries. Furthermore, instead of
|
||||
using attributes such as *id*, *from* and *to*, you might want to use the built-in
|
||||
*_id*, *_from* and *_to* attributes. Finally, [edge collection](../Glossary/README.md#edge-collection)s provide a nice way of
|
||||
establishing references / links between documents. These features have been left out here
|
||||
for brevity as well.
|
||||
|
||||
|
||||
!SUBSECTION Example data
|
||||
|
||||
Some of the following example queries are executed on a collection *users*
|
||||
with the following initial data:
|
||||
|
||||
```js
|
||||
RETURN "this will be returned"
|
||||
[
|
||||
"this will be returned"
|
||||
{ "id" : 100, "name" : "John", "age" : 37, "active" : true, "gender" : "m" },
|
||||
{ "id" : 101, "name" : "Fred", "age" : 36, "active" : true, "gender" : "m" },
|
||||
{ "id" : 102, "name" : "Jacob", "age" : 35, "active" : false, "gender" : "m" },
|
||||
{ "id" : 103, "name" : "Ethan", "age" : 34, "active" : false, "gender" : "m" },
|
||||
{ "id" : 104, "name" : "Michael", "age" : 33, "active" : true, "gender" : "m" },
|
||||
{ "id" : 105, "name" : "Alexander", "age" : 32, "active" : true, "gender" : "m" },
|
||||
{ "id" : 106, "name" : "Daniel", "age" : 31, "active" : true, "gender" : "m" },
|
||||
{ "id" : 107, "name" : "Anthony", "age" : 30, "active" : true, "gender" : "m" },
|
||||
{ "id" : 108, "name" : "Jim", "age" : 29, "active" : true, "gender" : "m" },
|
||||
{ "id" : 109, "name" : "Diego", "age" : 28, "active" : true, "gender" : "m" },
|
||||
{ "id" : 200, "name" : "Sophia", "age" : 37, "active" : true, "gender" : "f" },
|
||||
{ "id" : 201, "name" : "Emma", "age" : 36, "active" : true, "gender" : "f" },
|
||||
{ "id" : 202, "name" : "Olivia", "age" : 35, "active" : false, "gender" : "f" },
|
||||
{ "id" : 203, "name" : "Madison", "age" : 34, "active" : true, "gender": "f" },
|
||||
{ "id" : 204, "name" : "Chloe", "age" : 33, "active" : true, "gender" : "f" },
|
||||
{ "id" : 205, "name" : "Eva", "age" : 32, "active" : false, "gender" : "f" },
|
||||
{ "id" : 206, "name" : "Abigail", "age" : 31, "active" : true, "gender" : "f" },
|
||||
{ "id" : 207, "name" : "Isabella", "age" : 30, "active" : true, "gender" : "f" },
|
||||
{ "id" : 208, "name" : "Mary", "age" : 29, "active" : true, "gender" : "f" },
|
||||
{ "id" : 209, "name" : "Mariah", "age" : 28, "active" : true, "gender" : "f" }
|
||||
]
|
||||
```
|
||||
|
||||
Here is a query that creates the cross products of two arrays and runs a projection
|
||||
on it, using a few of AQL's built-in functions:
|
||||
For some of the examples, we'll also use a collection *relations* to store
|
||||
relationships between users. The example data for *relations* are as follows:
|
||||
|
||||
```js
|
||||
FOR year in [ 2011, 2012, 2013 ]
|
||||
FOR quarter IN [ 1, 2, 3, 4 ]
|
||||
RETURN {
|
||||
"y" : "year",
|
||||
"q" : quarter,
|
||||
"nice" : CONCAT(TO_STRING(quarter), "/", TO_STRING(year))
|
||||
}
|
||||
[
|
||||
{ "y" : "year", "q" : 1, "nice" : "1/2011" },
|
||||
{ "y" : "year", "q" : 2, "nice" : "2/2011" },
|
||||
{ "y" : "year", "q" : 3, "nice" : "3/2011" },
|
||||
{ "y" : "year", "q" : 4, "nice" : "4/2011" },
|
||||
{ "y" : "year", "q" : 1, "nice" : "1/2012" },
|
||||
{ "y" : "year", "q" : 2, "nice" : "2/2012" },
|
||||
{ "y" : "year", "q" : 3, "nice" : "3/2012" },
|
||||
{ "y" : "year", "q" : 4, "nice" : "4/2012" },
|
||||
{ "y" : "year", "q" : 1, "nice" : "1/2013" },
|
||||
{ "y" : "year", "q" : 2, "nice" : "2/2013" },
|
||||
{ "y" : "year", "q" : 3, "nice" : "3/2013" },
|
||||
{ "y" : "year", "q" : 4, "nice" : "4/2013" }
|
||||
{ "from" : 209, "to" : 205, "type" : "friend" },
|
||||
{ "from" : 206, "to" : 108, "type" : "friend" },
|
||||
{ "from" : 202, "to" : 204, "type" : "friend" },
|
||||
{ "from" : 200, "to" : 100, "type" : "friend" },
|
||||
{ "from" : 205, "to" : 101, "type" : "friend" },
|
||||
{ "from" : 209, "to" : 203, "type" : "friend" },
|
||||
{ "from" : 200, "to" : 203, "type" : "friend" },
|
||||
{ "from" : 100, "to" : 208, "type" : "friend" },
|
||||
{ "from" : 101, "to" : 209, "type" : "friend" },
|
||||
{ "from" : 206, "to" : 102, "type" : "friend" },
|
||||
{ "from" : 104, "to" : 100, "type" : "friend" },
|
||||
{ "from" : 104, "to" : 108, "type" : "friend" },
|
||||
{ "from" : 108, "to" : 209, "type" : "friend" },
|
||||
{ "from" : 206, "to" : 106, "type" : "friend" },
|
||||
{ "from" : 204, "to" : 105, "type" : "friend" },
|
||||
{ "from" : 208, "to" : 207, "type" : "friend" },
|
||||
{ "from" : 102, "to" : 108, "type" : "friend" },
|
||||
{ "from" : 207, "to" : 203, "type" : "friend" },
|
||||
{ "from" : 203, "to" : 106, "type" : "friend" },
|
||||
{ "from" : 202, "to" : 108, "type" : "friend" },
|
||||
{ "from" : 201, "to" : 203, "type" : "friend" },
|
||||
{ "from" : 105, "to" : 100, "type" : "friend" },
|
||||
{ "from" : 100, "to" : 109, "type" : "friend" },
|
||||
{ "from" : 207, "to" : 109, "type" : "friend" },
|
||||
{ "from" : 103, "to" : 203, "type" : "friend" },
|
||||
{ "from" : 208, "to" : 104, "type" : "friend" },
|
||||
{ "from" : 105, "to" : 104, "type" : "friend" },
|
||||
{ "from" : 103, "to" : 208, "type" : "friend" },
|
||||
{ "from" : 203, "to" : 107, "type" : "boyfriend" },
|
||||
{ "from" : 107, "to" : 203, "type" : "girlfriend" },
|
||||
{ "from" : 208, "to" : 109, "type" : "boyfriend" },
|
||||
{ "from" : 109, "to" : 208, "type" : "girlfriend" },
|
||||
{ "from" : 106, "to" : 205, "type" : "girlfriend" },
|
||||
{ "from" : 205, "to" : 106, "type" : "boyfriend" },
|
||||
{ "from" : 103, "to" : 209, "type" : "girlfriend" },
|
||||
{ "from" : 209, "to" : 103, "type" : "boyfriend" },
|
||||
{ "from" : 201, "to" : 102, "type" : "boyfriend" },
|
||||
{ "from" : 102, "to" : 201, "type" : "girlfriend" },
|
||||
{ "from" : 206, "to" : 100, "type" : "boyfriend" },
|
||||
{ "from" : 100, "to" : 206, "type" : "girlfriend" }
|
||||
]
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -111,13 +111,13 @@
|
|||
* [Advanced Features](Aql/Advanced.md)
|
||||
* [Array Operators](Aql/ArrayOperators.md)
|
||||
* [Usual Query Patterns](AqlExamples/README.md)
|
||||
* [Collection based queries](AqlExamples/CollectionQueries.md)
|
||||
* [Data-modification queries](AqlExamples/DataModificationQueries.md)
|
||||
* [Subqueries](Aql/CombiningQueries.md)
|
||||
* [Projections and filters](AqlExamples/ProjectionsAndFilters.md)
|
||||
* [Joins](AqlExamples/Join.md)
|
||||
* [Grouping](AqlExamples/Grouping.md)
|
||||
* [Traversals](AqlExamples/CombiningGraphTraversals.md)
|
||||
* [Queries without collections](AqlExamples/QueriesNoCollections.md)
|
||||
* [User Functions](AqlExtending/README.md)
|
||||
* [Conventions](AqlExtending/Conventions.md)
|
||||
* [Registering Functions](AqlExtending/Functions.md)
|
||||
|
|
Loading…
Reference in New Issue