ArangoDB Module

    This module should not be confused with thewhich can be used to access ArangoDB from outside the database. Although theAPIs share similarities and the functionality overlaps, the two are notcompatible with each other and can not be used interchangeably.

    arangodb.db

    The db object represents the current database and lets you access collections and run queries. For more information see the db object reference.

    Examples

    The aql template tag

    arangodb.aql

    The aql function is a JavaScript template string handler (or template tag).It can be used to write complex AQL queries as multi-line strings withouthaving to worry about bindVars and the distinction between collectionsand regular parameters.

    To use it just prefix a JavaScript template string (the ones with backticksinstead of quotes) with its import name (e.g. aql) and pass in variableslike you would with a regular template string. The string will automaticallybe converted into an object with query and bindVars attributes which youcan pass directly to db._query to execute. If you pass in a collection itwill be automatically recognized as a collection referenceand handled accordingly.

    Starting with ArangoDB 3.4 queries generated using the aql template tag canbe used inside other aql template strings, allowing arbitrary nesting. Bindparameters of nested queries will be merged automatically.

    Examples

    1. const filterValue = 23;
    2. const mydata = db._collection('mydata');
    3. const result = db._query(aql`
    4. FOR d IN ${mydata}
    5. FILTER d.num > ${filterValue}
    6. RETURN d
    7. `).toArray();
    8. // nested queries
    9. const color = "green";
    10. const filterByColor = aql`FILTER d.color == ${color}'`;
    11. const result2 = db._query(aql`
    12. FOR d IN ${mydata}
    13. ${filterByColor}
    14. RETURN d
    15. `).toArray();

    arangodb.aql.literal

    The aql.literal helper can be used to mark strings to be inlined into an AQLquery when using the aql template tag, rather than being treated as a bindparameter.

    Any value passed to aql.literal will be treated as part of the AQL query.To avoid becoming vulnerable to AQL injection attacks you should always prefernested queries if possible.

    Examples

    The aql.join helper

    arangodb.aql.join

    The aql.join helper takes an array of queries generated using the aql tagand combines them into a single query. The optional second argument will beused as literal string to combine the queries.

    1. // Basic usage
    2. const parts = [aql`FILTER`, aql`x`, aql`%`, aql`2`];
    3. const joined = aql.join(parts); // aql`FILTER x % 2`
    4. // Merge without the extra space
    5. const parts = [aql`FIL`, aql`TER`];
    6. const joined = aql.join(parts, ''); // aql`FILTER`;
    7. // Real world example: translate keys into document lookups
    8. const users = db._collection("users");
    9. const keys = ["abc123", "def456"];
    10. const docs = keys.map(key => aql`DOCUMENT(${users}, ${key})`);
    11. const aqlArray = aql`[${aql.join(docs, ", ")}]`;
    12. const result = db._query(aql`
    13. FOR d IN ${aqlArray}
    14. RETURN d
    15. `).toArray();
    16. // Query:
    17. // FOR d IN [DOCUMENT(@@value0, @value1), DOCUMENT(@@value0, @value2)]
    18. // RETURN d
    19. // Bind parameters:
    20. // @value0: "users"
    21. // value1: "abc123"
    22. // value2: "def456"
    23. // Alternative without `aql.join`
    24. const users = db._collection("users");
    25. const keys = ["abc123", "def456"];
    26. FOR key IN ${keys}
    27. LET d = DOCUMENT(${users}, key)
    28. RETURN d
    29. `).toArray();
    30. // Query:
    31. // FOR key IN @value0
    32. // LET d = DOCUMENT(@@value1, key)
    33. // RETURN d
    34. // Bind parameters:
    35. // value0: ["abc123", "def456"]
    36. // @value1: "users"

    arangodb.query

    The errors object

    arangodb.errors

    This object provides useful objects for each error code ArangoDB might use in ArangoError errors. This is helpful when trying to catch specific errors raised by ArangoDB, e.g. when trying to access a document that does not exist. Each object has a code property corresponding to the errorNum found on ArangoError errors.

    For a complete list of the error names and codes you may encounter see the .

    Examples

    1. const errors = require('@arangodb').errors;
    2. try {
    3. someCollection.document('does-not-exist');
    4. } catch (e) {
    5. if (e.isArangoError && e.errorNum === errors.ERROR_ARANGO_DOCUMENT_NOT_FOUND.code) {
    6. throw new Error('Document does not exist');
    7. }
    8. throw new Error('Something went wrong');
    9. }

    arangodb.time

    This function provides the current time in seconds as a floating point value with microsecond precisison.

    This function can be used instead of Date.now() when additional precision is needed.

    Examples