This is a major release and breaks backwards compatibility.
-
Removed ArangoDB 2.8 support
ArangoDB 2.8 has reached End of Life since mid 2018. Version 7 and above
of arangojs will no longer support ArangoDB 2.8 and earlier.
-
Removed Node.js 6/8 support
As of version 7 arangojs now requires language support for async/await.
This means arangojs requires Node.js 10 (LTS) or newer to function correctly.
-
Removed support for absolute endpoint URLs
This removes the isAbsolute
option from the arangojs configuration.
-
Removed ArangoError
re-export
The type can still be imported directly from the error
module.
-
Removed statusCode
properties of ArangoError
and HttpError
Both of these error types still expose the HTTP status code as the code
property. For ArangoError
the true HTTP status code may be different and
can still be accessed using the response.statusCode
property.
-
Removed collection createCapConstraint
, createHashIndex
,
createSkipList
, createPersistentIndex
, createGeoIndex
and
createFulltextIndex
methods
These methods are no longer part of the official ArangoDB API and can be
replaced by using the collection.ensureIndex
method.
-
Removed save(fromId, toId, edgeData)
method variants
Methods for creating edges now require the _to
and _from
attributes to
be specified in the edge (document) data and no longer accept these values
as positional arguments.
-
Removed collection.bulkUpdate
method
The new method collection.updateAll
now provides this functionality.
-
Removed collection.edge
method
This method was previously an alias for collection.document
.
The method graphEdgeCollection.edge
is unaffected by this change.
-
Removed graphName
option for edgeCollection.traversal
Graph traversals can still be performed via graph.traversal
.
-
Multiple Database
objects can now share a single Connection
All arangojs objects now reference a Database
object rather than accessing
the underlying Connection
directly. This allows multiple Database
objects
to be created by using the db.database
method while still allowing the
creation of separate database objects with separate connection pools if
desired.
-
Memoized Database
, Collection
, Graph
, View
and Analyzer
Database objects are now memoized per-connection and the other object types
are memoized per-database. Using useDatabase
de-memoizes the database
object to prevent unexpected behavior.
-
Added support for View
in aql
templates (#667)
View
(or ArangoSearchView
) objects can now be passed into aql
templates
like ArangoCollection
objects.
-
Moved collectionToString
helper into collection
module
-
Moved Dict
type into connection
module
-
Moved Patch
type into documents
module
-
Removed Errback
type from public API
-
Renamed util/foxx-manifest
module to foxx-manifest
-
Renamed method db.arangoSearchView
to db.view
-
Renamed method db.createArangoSearchView
to db.createView
-
Replaced methods db.enableServiceDevelopmentMode
and
db.disableServiceDevelopmentMode
with db.setServiceDevelopmentMode
-
Flattened database query
method options
argument
The optional options
argument previously contained an additional options
object with additional query options. These options are now specified on the
options
argument itself directly.
Before:
db.query(aql`FOR doc IN ${collection} RETURN doc`, {
cache: false,
options: { fullCount: true },
});
After:
db.query(aql`FOR doc IN ${collection} RETURN doc`, {
cache: false,
fullCount: true,
});
-
Changed db.listServices
option excludeSystem
default to true
To be more consistent with the equivalent options in other methods,
the default value has been changed from false
to true
.
-
Changed db.createDatabase
return type to Database
-
Renamed database.setQueryTracking
to database.queryTracking
The method will now return the existing query tracking properties or set the
new query tracking properties depending on whether an argument is provided.
-
Method db.transaction
no longer acts as an alias for executeTransaction
The method now only allows looking up transactions by ID. Previously it would
wrap executeTransaction
if passed the arguments expected by that method.
-
Merged DocumentCollection
and EdgeCollection
APIs
All collections are now implemented as generic Collection
objects.
In TypeScript the generic collection object can still be explicitly cast to
DocumentCollection
or EdgeCollection
for stricter type safety.
-
Renamed collection.setProperties
to collection.properties
The method will now return the existing properties or set the properties
depending on whether an argument is provided.
-
Removed CollectionMetadata
fields from CollectionProperties
type
Methods that previously returned CollectionProperties
now return
CollectionMetadata & CollectionProperties
.
-
Collection methods save
, update
, replace
and remove
no longer take
arrays as input
The array versions have been renamed to saveAll
, updateAll
, replaceAll
and removeAll
to reduce the likelihood of mistakes and provide more helpful
type signatures.
-
Collection methods will now throw errors when passed documents or document
IDs from different collections where a document key or ID for a document in
the same collection is expected
For example the following code will now result in an error rather than the
document from a different collection being returned:
const aliceId = "alice/123"; // Document from collection "alice"
const bobCol = db.collection("bob"); // Collection "bob"
const doc = await bobCol.document(aliceId); // THROWS
-
Changed collection.import
option type
behavior
Previously this option would always default to "auto"
.
When passing a string
, Buffer
or Blob
as data, the option now defaults
to undefined
. This matches the behavior in previous versions of setting
the option explicitly to null
.
Additionally, the value "array"
has been replaced with "list"
.
When passing an array as data, the option is now no longer supported as the
corresponding value will be inferred from the array's contents:
If the array's first item is also an array, it will match the behavior in
previous versions of setting the option explicitly to null
.
Otherwise it will match the behavior in previous versions of setting the
option explicitly to "documents"
or "auto"
, or omitting it entirely.
-
Changed collection.list
return type to ArrayCursor
-
Graph methods now also accept ArangoCollection
instances instead of names
This brings these methods behavior in line with that of the beginTransaction
and executeTransaction
methods of Database
objects.
-
Graph create
method (and db.createGraph
) signature changed
The graph.create
method now takes an array of edge definitions as the
first argument and any additional options (not just the waitForSync
option) as the second argument.
Before:
await graph.create(
{
edgeDefinitions: [{ collection: "edges", from: ["a"], to: ["b"] }],
isSmart: true,
},
{ waitForSync: true }
);
After:
await graph.create([{ collection: "edges", from: ["a"], to: ["b"] }], {
isSmart: true,
waitForSync: true,
});
-
First argument to graph.replaceEdgeDefinition
is now optional
Since the new edge definition already includes the edge collection name
that identifies the edge definition, it is now possible to specify only the
new edge definition object without additionally specifying the collection
name as the first argument.
Before:
await graph.replaceEdgeDefinition("edges", {
collection: "edges", // This is a bit redundant
from: ["a"],
to: ["b"],
});
After:
await graph.replaceEdgeDefinition({
collection: "edges",
from: ["a"],
to: ["b"],
});
-
Graph collection return values now contain old
and new
properties when
returnOld
or returnNew
options are used
This behavior represents a compromise between remaining consistent with the
behavior of the regular collection method equivalents and remaining
compatible with the ArangoDB HTTP API response object quirks.
-
Added databaseName
configuration option
Setting this option to a database name will result in the initial Database
object using this database instead of the default _system
database.
-
Added auth
configuration option
It is now possible to pass authentication credentials using the auth
option in addition to calling db.useBasicAuth
or db.useBearerAuth
.
-
Added precaptureStackTraces
configuration option (#599)
This option can be used to get more useful stack traces but results in a
performance hit on every request.
-
Added before
and after
to the agentOptions
configuration option (#585)
These methods can be used to track performance metrics for outgoing requests.
-
Improved type signatures for TypeScript and inline documentation
Most methods should now provide full type signatures for options and response
objects and provide inline documentation in IDEs and editors that support
this feature in TypeScript and JavaScript.
-
Added db.database
method
This method replaces the use case for the deprecated db.useDatabase
method.
-
Added support for extended options in db.createDatabase
This method now supports passing an extended options object instead of
passing the users array directly.
-
Added db.createCollection
and db.createEdgeCollection
methods
These are convenience methods wrapping collection.create
. In TypeScript
createEdgeCollection
will return a collection cast to the EdgeCollection
type.
-
Added db.createGraph
method
This is a convenience method wrapping graph.create
.
-
Added db.createArangoSearchView
method
This is a convenience method wrapping view.create
.
-
Added db.createAnalyzer
method
This is a convenience method wrapping analyzer.create
.
-
Added support for db.createFunction
option isDeterministic
-
Added support for db.listServices
option excludeSystem