mirror of https://gitee.com/bigwinds/arangodb
Add initial docs 'Coming from SQL'
This commit is contained in:
parent
f3422d96a6
commit
ae7554a9e1
|
@ -19,17 +19,17 @@ Here is an example document:
|
|||
{
|
||||
"_id" : "myusers/3456789",
|
||||
"_key" : "3456789",
|
||||
"_rev" : "3456789",
|
||||
"firstName" : "Hugo",
|
||||
"lastName" : "Schlonz",
|
||||
"_rev" : "14253647",
|
||||
"firstName" : "John",
|
||||
"lastName" : "Doe",
|
||||
"address" : {
|
||||
"street" : "Street of Happiness",
|
||||
"city" : "Heretown"
|
||||
"street" : "Road To Nowhere 1",
|
||||
"city" : "Gotham"
|
||||
},
|
||||
"hobbies" : [
|
||||
"swimming",
|
||||
"biking",
|
||||
"programming"
|
||||
{name: "swimming", howFavorite: 10},
|
||||
{name: "biking", howFavorite: 6},
|
||||
{name: "programming", howFavorite: 4}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
|
|
@ -13,21 +13,21 @@ Any transaction only ever sees a single revision of a document.
|
|||
For example:
|
||||
|
||||
```js
|
||||
{
|
||||
"firstName" : "Hugo",
|
||||
"lastName" : "Schlonz",
|
||||
"address" : {
|
||||
"city" : "Hier",
|
||||
"street" : "Strasse 1"
|
||||
},
|
||||
"hobbies" : [
|
||||
"swimming",
|
||||
"biking",
|
||||
"programming"
|
||||
],
|
||||
"_id" : "demo/schlonz",
|
||||
"_rev" : "13728680",
|
||||
"_key" : "schlonz"
|
||||
{
|
||||
"_id" : "myusers/3456789",
|
||||
"_key" : "3456789",
|
||||
"_rev" : "14253647",
|
||||
"firstName" : "John",
|
||||
"lastName" : "Doe",
|
||||
"address" : {
|
||||
"street" : "Road To Nowhere 1",
|
||||
"city" : "Gotham"
|
||||
},
|
||||
"hobbies" : [
|
||||
{name: "swimming", howFavorite: 10},
|
||||
{name: "biking", howFavorite: 6},
|
||||
{name: "programming", howFavorite: 4}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
@ -0,0 +1,117 @@
|
|||
!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).
|
Loading…
Reference in New Issue