1
votes

Can I return something like:

{
"c/12313" = 1,
"c/24223" = 2,
"c/43423" = 3,
...
}

from an AQL query? The idea is something like (this non-working code):

for c in my_collection
return { c._id : c.sortOrder }

where sortOrder is some property on my documents.

1

1 Answers

5
votes

Yes, it is possible to have dynamic attribute names:

LET key = "foo"
LET value = "bar"
RETURN { [ key ]: value } // { "foo": "bar" }

An expression to compute the attribute key has to be wrapped in [ square brackets ], like in JavaScript.

This doesn't return quite the desired result however:

FOR c IN my_collection
  RETURN { [ c._id ]: c.sortOrder }

[
  { "c/12313": 1 },
  { "c/24223": 2 },
  { "c/43423": 3 },
  ...
]

To not return separate objects for every key, MERGE() and a subquery are required:

RETURN MERGE(
  FOR c IN my_collection
    RETURN { [ c._id ]: c.sortOrder }
)

[
  {
    "c/12313": 1,
    "c/24223": 2,
    "c/43423": 3,
    ...
  }
]