8000 MERGE_RECURSIVE() allows single argument including an array of object… · arangodb/docs@0d65550 · GitHub
[go: up one dir, main page]

Skip to content
This repository was archived by the owner on Dec 13, 2023. It is now read-only.

Commit 0d65550

Browse files
Simran-Bansoboleva
andauthored
MERGE_RECURSIVE() allows single argument including an array of objects (#1035)
* MERGE_RECURSIVE() allows single argument including an array of objects * fix broken docublock * Update examples for 3.10 in feature/aql-merge-recursive-1-arg at 2022-06-23T11:55:28+00:00 Co-authored-by: ansoboleva <93702078+ansoboleva@users.noreply.github.com> Co-authored-by: arangodb-release-bot <anastasia.soboleva@arangodb.com>
1 parent b6d6683 commit 0d65550

File tree

347 files changed

+6135
-6018
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

347 files changed

+6135
-6018
lines changed

3.10/aql/functions-document.md

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -585,29 +585,56 @@ MERGE_RECURSIVE()
585585
`MERGE_RECURSIVE(document1, document2, ... documentN) → mergedDocument`
586586

587587
Recursively merge the documents `document1` to `documentN` into a single document.
588-
If document attribute keys are ambiguous, the merged result will contain the values
588+
If document attribute keys overlap, the merged result contains the values
589589
of the documents contained later in the argument list.
590590

591591
- **documents** (object, *repeatable*): an arbitrary number of documents as
592-
multiple arguments (at least 2)
592+
multiple arguments (at least 1)
593593
- returns **mergedDocument** (object): a combined document
594594

595-
`MERGE_RECURSIVE()` does not support the single array parameter variant that
596-
`MERGE()` offers.
597-
598595
**Examples**
599596

600-
Two documents with distinct attribute names can easily be merged into one:
597+
Merge two documents with the same top-level attribute, combining the `name`,
598+
`age`, and `livesIn` sub-attributes:
601599

602600
{% aqlexample examplevar="examplevar" type="type" query="query" bind="bind" result="result" %}
603-
@startDocuBlockInline aqlMergeRecursive
604-
@EXAMPLE_AQL{aqlMergeRecursive}
601+
@startDocuBlockInline aqlMergeRecursive_1
602+
@EXAMPLE_AQL{aqlMergeRecursive_1}
605603
RETURN MERGE_RECURSIVE(
606604
{ "user-1": { "name": "Jane", "livesIn": { "city": "LA" } } },
607605
{ "user-1": { "age": 42, "livesIn": { "state": "CA" } } }
608606
)
609607
@END_EXAMPLE_AQL
610-
@endDocuBlock aqlMergeRecursive
608+
@endDocuBlock aqlMergeRecursive_1
609+
{% endaqlexample %}
610+
{% include aqlexample.html id=examplevar type=type query=query bind=bind result=result %}
611+
612+
`MERGE_RECURSIVE(documents) → mergedDocument`
613+
614+
Recursively merge the list of documents into a single document.
615+
If document attribute keys overlap, the merged result contains the values
616+
of the documents specified later in the list.
617+
618+
- **documents** (array): an array with an arbitrary number of objects
619+
- returns **mergedDocument** (object): a combined document
620+
621+
**Examples**
622+
623+
Merge a list of two documents with the same top-level attribute, combining the
624+
`name` and `age` sub-attributes but overwriting the `city` value in the
625+
`livesIn` sub-attribute:
626+
627+
{% aqlexample examplevar="examplevar" type="type" query="query" bind="bind" result="result" %}
628+
@startDocuBlockInline aqlMergeRecursive_2
629+
@EXAMPLE_AQL{aqlMergeRecursive_2}
630+
RETURN MERGE_RECURSIVE(
631+
[
632+
{ "user-1": { "name": "Jane", "livesIn": { "city": "LA" } } },
633+
{ "user-1": { "age": 42, "livesIn": { "city": "NY" } } }
634+
]
635+
)
636+
@END_EXAMPLE_AQL
637+
@endDocuBlock aqlMergeRecursive_2
611638
{% endaqlexample %}
612639
{% include aqlexample.html id=examplevar type=type query=query bind=bind result=result %}
613640

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,63 @@
11
arangosh&gt; db.five.insert({ <span class="hljs-attr">name</span> : <span class="hljs-string">&quot;one&quot;</span> });
22
{
3-
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/114&quot;</span>,
4-
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;114&quot;</span>,
5-
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eWXJjlm--_&quot;</span>
3+
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/110&quot;</span>,
4+
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;110&quot;</span>,
5+
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eX_nVs----&quot;</span>
66
}
77
arangosh&gt; db.five.insert({ <span class="hljs-attr">name</span> : <span class="hljs-string">&quot;two&quot;</span> });
88
{
9-
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/116&quot;</span>,
10-
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;116&quot;</span>,
11-
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eWXJjlq---&quot;</span>
9+
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/112&quot;</span>,
10+
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;112&quot;</span>,
11+
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eX_nVs---_&quot;</span>
1212
}
1313
arangosh&gt; db.five.insert({ <span class="hljs-attr">name</span> : <span class="hljs-string">&quot;three&quot;</span> });
1414
{
15-
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/118&quot;</span>,
16-
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;118&quot;</span>,
17-
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eWXJjlq--_&quot;</span>
15+
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/114&quot;</span>,
16+
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;114&quot;</span>,
17+
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eX_nVs---A&quot;</span>
1818
}
1919
arangosh&gt; db.five.insert({ <span class="hljs-attr">name</span> : <span class="hljs-string">&quot;four&quot;</span> });
2020
{
21-
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/120&quot;</span>,
22-
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;120&quot;</span>,
23-
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eWXJjlq--A&quot;</span>
21+
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/116&quot;</span>,
22+
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;116&quot;</span>,
23+
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eX_nVsC---&quot;</span>
2424
}
2525
arangosh&gt; db.five.insert({ <span class="hljs-attr">name</span> : <span class="hljs-string">&quot;five&quot;</span> });
2626
{
27-
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/122&quot;</span>,
28-
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;122&quot;</span>,
29-
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eWXJjlq--B&quot;</span>
27+
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/118&quot;</span>,
28+
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;118&quot;</span>,
29+
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eX_nVsC--_&quot;</span>
3030
}
3131
arangosh&gt; db.five.all().toArray();
3232
[
3333
{
34-
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;114&quot;</span>,
35-
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/114&quot;</span>,
36-
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eWXJjlm--_&quot;</span>,
34+
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;110&quot;</span>,
35+
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/110&quot;</span>,
36+
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eX_nVs----&quot;</span>,
3737
<span class="hljs-string">&quot;name&quot;</span> : <span class="hljs-string">&quot;one&quot;</span>
3838
},
3939
{
40-
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;116&quot;</span>,
41-
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/116&quot;</span>,
42-
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eWXJjlq---&quot;</span>,
40+
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;112&quot;</span>,
41+
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/112&quot;</span>,
42+
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eX_nVs---_&quot;</span>,
4343
<span class="hljs-string">&quot;name&quot;</span> : <span class="hljs-string">&quot;two&quot;</span>
4444
},
4545
{
46-
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;118&quot;</span>,
47-
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/118&quot;</span>,
48-
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eWXJjlq--_&quot;</span>,
46+
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;114&quot;</span>,
47+
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/114&quot;</span>,
48+
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eX_nVs---A&quot;</span>,
4949
<span class="hljs-string">&quot;name&quot;</span> : <span class="hljs-string">&quot;three&quot;</span>
5050
},
5151
{
52-
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;120&quot;</span>,
53-
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/120&quot;</span>,
54-
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eWXJjlq--A&quot;</span>,
52+
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;116&quot;</span>,
53+
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/116&quot;</span>,
54+
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eX_nVsC---&quot;</span>,
5555
<span class="hljs-string">&quot;name&quot;</span> : <span class="hljs-string">&quot;four&quot;</span>
5656
},
5757
{
58-
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;122&quot;</span>,
59-
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/122&quot;</span>,
60-
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eWXJjlq--B&quot;</span>,
58+
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;118&quot;</span>,
59+
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/118&quot;</span>,
60+
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eX_nVsC--_&quot;</span>,
6161
<span class="hljs-string">&quot;name&quot;</span> : <span class="hljs-string">&quot;five&quot;</span>
6262
}
6363
]
Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,45 @@
11
arangosh&gt; db.five.insert({ <span class="hljs-attr">name</span> : <span class="hljs-string">&quot;one&quot;</span> });
22
{
3-
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/134&quot;</span>,
4-
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;134&quot;</span>,
5-
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eWXJjme--_&quot;</span>
3+
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/130&quot;</span>,
4+
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;130&quot;</span>,
5+
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eX_nVsy--_&quot;</span>
66
}
77
arangosh&gt; db.five.insert({ <span class="hljs-attr">name</span> : <span class="hljs-string">&quot;two&quot;</span> });
88
{
9-
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/136&quot;</span>,
10-
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;136&quot;</span>,
11-
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eWXJjme--A&quot;</span>
9+
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/132&quot;</span>,
10+
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;132&quot;</span>,
11+
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eX_nVsy--A&quot;</span>
1212
}
1313
arangosh&gt; db.five.insert({ <span class="hljs-attr">name</span> : <span class="hljs-string">&quot;three&quot;</span> });
1414
{
15-
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/138&quot;</span>,
16-
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;138&quot;</span>,
17-
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eWXJjme--B&quot;</span>
15+
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/134&quot;</span>,
16+
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;134&quot;</span>,
17+
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eX_nVsy--B&quot;</span>
1818
}
1919
arangosh&gt; db.five.insert({ <span class="hljs-attr">name</span> : <span class="hljs-string">&quot;four&quot;</span> });
2020
{
21-
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/140&quot;</span>,
22-
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;140&quot;</span>,
23-
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eWXJjme--C&quot;</span>
21+
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/136&quot;</span>,
22+
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;136&quot;</span>,
23+
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eX_nVs2---&quot;</span>
2424
}
2525
arangosh&gt; db.five.insert({ <span class="hljs-attr">name</span> : <span class="hljs-string">&quot;five&quot;</span> });
2626
{
27-
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/142&quot;</span>,
28-
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;142&quot;</span>,
29-
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eWXJjme--D&quot;</span>
27+
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/138&quot;</span>,
28+
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;138&quot;</span>,
29+
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eX_nVs2--_&quot;</span>
3030
}
3131
arangosh&gt; db.five.all().limit(<span class="hljs-number">2</span>).toArray();
3232
[
3333
{
34-
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;134&quot;</span>,
35-
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/134&quot;</span>,
36-
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eWXJjme--_&quot;</span>,
34+
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;130&quot;</span>,
35+
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/130&quot;</span>,
36+
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eX_nVsy--_&quot;</span>,
3737
<span class="hljs-string">&quot;name&quot;</span> : <span class="hljs-string">&quot;one&quot;</span>
3838
},
3939
{
40-
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;136&quot;</span>,
41-
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/136&quot;</span>,
42-
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eWXJjme--A&quot;</span>,
40+
<span class="hljs-string">&quot;_key&quot;</span> : <span class="hljs-string">&quot;132&quot;</span>,
41+
<span class="hljs-string">&quot;_id&quot;</span> : <span class="hljs-string">&quot;five/132&quot;</span>,
42+
<span class="hljs-string">&quot;_rev&quot;</span> : <span class="hljs-string">&quot;_eX_nVsy--A&quot;</span>,
4343
<span class="hljs-string">&quot;name&quot;</span> : <span class="hljs-string">&quot;two&quot;</span>
4444
}
4545
]

0 commit comments

Comments
 (0)
0