I would think the most efficient way to do this is by using an array to
define the list of keys. The array could be another collection, a static
array, or even a bindVariable.
Here's an example, retrieving a few documents from the list of collections:
LET keys = [ '_apps', '_fishbowl', '_jobs', '_routing' ]
FOR c IN COLLECTIONS()
FILTER c.name in keys
RETURN c
The biggest caveat here is to make sure the filter clause is covered by an
index. I'm using "c.name" here, which is NOT indexed (this list is pretty
small), but "_key" is always indexed, so you should be OK.
Using this pattern, you could also write your query like this:
FOR doc IN myCollection
FILTER doc._key in [ '1', '2, '3' /* etc. for 997 more keys */ ]
RETURN doc
Or this:
FOR doc IN myCollection
FILTER doc._key in @keys /* @keys is bound at runtime to your array */
RETURN doc
On Wednesday, July 31, 2019 at 1:57:28 AM UTC-7, Dave Challis wrote:
>
> Is there a preferred or most performant way of querying for a subset of
> documents in AQL? I know there's a separate API for fetching bulk
> documents, but this is something I need to do in the middle of a more
> complex AQL query. I know I can use either:
>
> FOR doc IN myCollection
> FILTER doc._key == "1" || doc._key == "2" || doc._key == "3" // etc.
> for 997 more keys
> RETURN doc
>
> Or I could fetch documents directly:
>
> RETURN [ DOCUMENT("myCollection/1"), DOCUMENT("myCollection/2"), DOCUMENT(
> "myCollection/3"), ... ]
>
> Is either of these preferred? Or is there another method I might be
> missing for doing this in AQL?
>
--
You received this message because you are subscribed to the Google Groups
"ArangoDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/arangodb/39b39199-7e65-4fe2-9dfd-6649dcf98d95%40googlegroups.com.