# GraphEdgeCollection API The _GraphEdgeCollection API_ extends the [_Collection API_](../Collection/README.md) with the following methods. ## graphEdgeCollection.remove `async graphEdgeCollection.remove(documentHandle): Object` Deletes the edge with the given _documentHandle_ from the collection. **Arguments** * **documentHandle**: `string` The handle of the edge to retrieve. This can be either the `_id` or the `_key` of an edge in the collection, or an edge (i.e. an object with an `_id` or `_key` property). **Examples** ```js const graph = db.graph('some-graph'); const collection = graph.edgeCollection('edges'); await collection.remove('some-key') // document 'edges/some-key' no longer exists // -- or -- await collection.remove('edges/some-key') // document 'edges/some-key' no longer exists ``` ## graphEdgeCollection.edge `async graphEdgeCollection.edge(documentHandle): Object` Retrieves the edge with the given _documentHandle_ from the collection. **Arguments** * **documentHandle**: `string` The handle of the edge to retrieve. This can be either the `_id` or the `_key` of an edge in the collection, or an edge (i.e. an object with an `_id` or `_key` property). **Examples** ```js const graph = db.graph('some-graph'); const collection = graph.edgeCollection('edges'); const edge = await collection.edge('some-key'); // the edge exists assert.equal(edge._key, 'some-key'); assert.equal(edge._id, 'edges/some-key'); // -- or -- const edge = await collection.edge('edges/some-key'); // the edge exists assert.equal(edge._key, 'some-key'); assert.equal(edge._id, 'edges/some-key'); ``` ## graphEdgeCollection.save `async graphEdgeCollection.save(data, [fromId, toId]): Object` Creates a new edge between the vertices _fromId_ and _toId_ with the given _data_. **Arguments** * **data**: `Object` The data of the new edge. If _fromId_ and _toId_ are not specified, the _data_ needs to contain the properties __from_ and __to_. * **fromId**: `string` (optional) The handle of the start vertex of this edge. This can be either the `_id` of a document in the database, the `_key` of an edge in the collection, or a document (i.e. an object with an `_id` or `_key` property). * **toId**: `string` (optional) The handle of the end vertex of this edge. This can be either the `_id` of a document in the database, the `_key` of an edge in the collection, or a document (i.e. an object with an `_id` or `_key` property). **Examples** ```js const db = new Database(); const graph = db.graph('some-graph'); const collection = graph.edgeCollection('edges'); const edge = await collection.save( {some: 'data'}, 'vertices/start-vertex', 'vertices/end-vertex' ); assert.equal(edge._id, 'edges/' + edge._key); assert.equal(edge.some, 'data'); assert.equal(edge._from, 'vertices/start-vertex'); assert.equal(edge._to, 'vertices/end-vertex'); ``` ## graphEdgeCollection.edges `async graphEdgeCollection.edges(documentHandle): Array` Retrieves a list of all edges of the document with the given _documentHandle_. **Arguments** * **documentHandle**: `string` The handle of the document to retrieve the edges of. This can be either the `_id` of a document in the database, the `_key` of an edge in the collection, or a document (i.e. an object with an `_id` or `_key` property). **Examples** ```js const db = new Database(); const graph = db.graph('some-graph'); const collection = graph.edgeCollection('edges'); await collection.import([ ['_key', '_from', '_to'], ['x', 'vertices/a', 'vertices/b'], ['y', 'vertices/a', 'vertices/c'], ['z', 'vertices/d', 'vertices/a'] ]); const edges = await collection.edges('vertices/a'); assert.equal(edges.length, 3); assert.deepEqual(edges.map(edge => edge._key), ['x', 'y', 'z']); ``` ## graphEdgeCollection.inEdges `async graphEdgeCollection.inEdges(documentHandle): Array` Retrieves a list of all incoming edges of the document with the given _documentHandle_. **Arguments** * **documentHandle**: `string` The handle of the document to retrieve the edges of. This can be either the `_id` of a document in the database, the `_key` of an edge in the collection, or a document (i.e. an object with an `_id` or `_key` property). **Examples** ```js const db = new Database(); const graph = db.graph('some-graph'); const collection = graph.edgeCollection('edges'); await collection.import([ ['_key', '_from', '_to'], ['x', 'vertices/a', 'vertices/b'], ['y', 'vertices/a', 'vertices/c'], ['z', 'vertices/d', 'vertices/a'] ]); const edges = await collection.inEdges('vertices/a'); assert.equal(edges.length, 1); assert.equal(edges[0]._key, 'z'); ``` ## graphEdgeCollection.outEdges `async graphEdgeCollection.outEdges(documentHandle): Array` Retrieves a list of all outgoing edges of the document with the given _documentHandle_. **Arguments** * **documentHandle**: `string` The handle of the document to retrieve the edges of. This can be either the `_id` of a document in the database, the `_key` of an edge in the collection, or a document (i.e. an object with an `_id` or `_key` property). **Examples** ```js const db = new Database(); const graph = db.graph('some-graph'); const collection = graph.edgeCollection('edges'); await collection.import([ ['_key', '_from', '_to'], ['x', 'vertices/a', 'vertices/b'], ['y', 'vertices/a', 'vertices/c'], ['z', 'vertices/d', 'vertices/a'] ]); const edges = await collection.outEdges('vertices/a'); assert.equal(edges.length, 2); assert.deepEqual(edges.map(edge => edge._key), ['x', 'y']); ``` ## graphEdgeCollection.traversal `async graphEdgeCollection.traversal(startVertex, opts): Object` Performs a traversal starting from the given _startVertex_ and following edges contained in this edge collection. **Arguments** * **startVertex**: `string` The handle of the start vertex. This can be either the `_id` of a document in the database, the `_key` of an edge in the collection, or a document (i.e. an object with an `_id` or `_key` property). * **opts**: `Object` See [the HTTP API documentation](../../../..//HTTP/Traversal/index.html) for details on the additional arguments. Please note that while _opts.filter_, _opts.visitor_, _opts.init_, _opts.expander_ and _opts.sort_ should be strings evaluating to well-formed JavaScript code, it's not possible to pass in JavaScript functions directly because the code needs to be evaluated on the server and will be transmitted in plain text. **Examples** ```js const db = new Database(); const graph = db.graph('some-graph'); const collection = graph.edgeCollection('edges'); await collection.import([ ['_key', '_from', '_to'], ['x', 'vertices/a', 'vertices/b'], ['y', 'vertices/b', 'vertices/c'], ['z', 'vertices/c', 'vertices/d'] ]); const result = await collection.traversal('vertices/a', { direction: 'outbound', visitor: 'result.vertices.push(vertex._key);', init: 'result.vertices = [];' }); assert.deepEqual(result.vertices, ['a', 'b', 'c', 'd']); ```