mirror of https://gitee.com/bigwinds/arangodb
118 lines
2.7 KiB
Plaintext
118 lines
2.7 KiB
Plaintext
!CHAPTER Coming from SQL
|
|
|
|
!SUBSECTION How do browse vectors translate into document queries?
|
|
|
|
In traditional SQL you may either fetch all columns of a table row by row, using
|
|
`SELECT * FROM table`, or select a subset of the columns. The list of table
|
|
columns to fetch is commonly called *column list* or *browse vector*:
|
|
|
|
```sql
|
|
SELECT columnA, columnB, columnZ FROM table
|
|
```
|
|
|
|
Since documents aren't two-dimensional, and neither do you want to be limited to
|
|
returning two-dimensional lists, the requirements for a query language are higher.
|
|
AQL is thus a little bit more complex than plain SQL at first, but offers much
|
|
more flexibility in the long run. It lets you handle arbitrarily structured
|
|
documents in convenient ways, mostly leaned on the syntax used in JavaScript.
|
|
|
|
!SUBSUBSECTION Composing the documents to be returned
|
|
|
|
The AQL `RETURN` statement returns one item per document it is handed. You can
|
|
return the whole document, or just parts of it. Given that *oneDocument* is
|
|
a document (retrieved like `LET oneDocument = DOCUMENT("myusers/3456789")`
|
|
for instance), it can be returned as-is like this:
|
|
|
|
```js
|
|
RETURN oneDocument
|
|
|
|
```json
|
|
[
|
|
{
|
|
"_id" : "myusers/3456789",
|
|
"_key" : "3456789"
|
|
"_rev" : "14253647",
|
|
"firstName" : "John",
|
|
"lastName" : "Doe",
|
|
"address" : {
|
|
"city" : "Gotham",
|
|
"street" : "Road To Nowhere 1"
|
|
},
|
|
"hobbies" : [
|
|
{name: "swimming", howFavourite: 10},
|
|
{name: "biking", howFavourite: 6},
|
|
{name: "programming", howFavourite: 4}
|
|
]
|
|
}
|
|
]
|
|
```
|
|
|
|
Return the hobbies sub-structure only:
|
|
|
|
```js
|
|
RETURN oneDocument.hobbies
|
|
```
|
|
|
|
```json
|
|
[
|
|
[
|
|
{name: "swimming", howFavourite: 10},
|
|
{name: "biking", howFavourite: 6},
|
|
{name: "programming", howFavourite: 4}
|
|
]
|
|
]
|
|
```
|
|
|
|
Return the hobbies and the address:
|
|
|
|
```js
|
|
RETURN {
|
|
hobbies: oneDocument.hobbies,
|
|
address: oneDocument.address
|
|
}
|
|
```
|
|
|
|
```json
|
|
[
|
|
{
|
|
hobbies: [
|
|
{name: "swimming", howFavourite: 10},
|
|
{name: "biking", howFavourite: 6},
|
|
{name: "programming", howFavourite: 4}
|
|
],
|
|
address: {
|
|
"city" : "Gotham",
|
|
"street" : "Road To Nowhere 1"
|
|
}
|
|
}
|
|
]
|
|
```
|
|
|
|
Return the first hobby only:
|
|
|
|
```js
|
|
RETURN oneDocument.hobbies[0].name
|
|
```
|
|
|
|
```json
|
|
[
|
|
"swimming"
|
|
]
|
|
```
|
|
|
|
Return a list of all hobby strings:
|
|
|
|
```js
|
|
RETURN { hobbies: oneDocument.hobbies[*].name }
|
|
```
|
|
|
|
```json
|
|
[
|
|
{hobbies: ["swimming", "biking", "porgramming"] }
|
|
]
|
|
```
|
|
|
|
More complex [array](../../AQL/Functions/Array.md) and
|
|
[object manipulations](../../AQL/Functions/Document.md) can be done using
|
|
AQL functions and [operators](../../AQL/Operators.md).
|