mirror of https://gitee.com/bigwinds/arangodb
Added the knows graph of the traversal module to graph examples. Started rewriting traversal examples for new graph module.
This commit is contained in:
parent
479268d450
commit
1d503a0d2a
|
@ -33,6 +33,7 @@ var actions = require("org/arangodb/actions");
|
||||||
var db = require("internal").db;
|
var db = require("internal").db;
|
||||||
var traversal = require("org/arangodb/graph/traversal");
|
var traversal = require("org/arangodb/graph/traversal");
|
||||||
var Traverser = traversal.Traverser;
|
var Traverser = traversal.Traverser;
|
||||||
|
var graph = require("org/arangodb/general-graph");
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// --SECTION-- private functions
|
// --SECTION-- private functions
|
||||||
|
@ -79,7 +80,9 @@ function notFound (req, res, code, message) {
|
||||||
///
|
///
|
||||||
/// - `startVertex`: id of the startVertex, e.g. `"users/foo"`.
|
/// - `startVertex`: id of the startVertex, e.g. `"users/foo"`.
|
||||||
///
|
///
|
||||||
/// - `edgeCollection`: name of the collection that contains the edges.
|
/// - `edgeCollection`: **Deprecated** name of the collection that contains the edges.
|
||||||
|
///
|
||||||
|
/// - `graphName`: name of the graph that contains the edges.
|
||||||
///
|
///
|
||||||
/// - `filter` (optional, default is to include all nodes):
|
/// - `filter` (optional, default is to include all nodes):
|
||||||
/// body (JavaScript code) of custom filter function
|
/// body (JavaScript code) of custom filter function
|
||||||
|
@ -213,90 +216,49 @@ function notFound (req, res, code, message) {
|
||||||
/// Follow only outbound edges:
|
/// Follow only outbound edges:
|
||||||
///
|
///
|
||||||
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalOutbound}
|
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalOutbound}
|
||||||
/// var cv = "persons";
|
/// var examples = require("org/arangodb/graph-examples/example-graph.js");
|
||||||
/// var ce = "knows";
|
/// var g = examples.loadGraph("knows_graph");
|
||||||
/// db._drop(cv);
|
/// var a = g.persons.document("alice")._id;
|
||||||
/// db._drop(ce);
|
|
||||||
/// var users = db._create(cv);
|
|
||||||
/// var knows = db._createEdgeCollection(ce);
|
|
||||||
/// var a = users.save({name: "Alice"})._id;
|
|
||||||
/// var b = users.save({name: "Bob"})._id;
|
|
||||||
/// var c = users.save({name: "Charlie"})._id;
|
|
||||||
/// var d = users.save({name: "Dave"})._id;
|
|
||||||
/// var e = users.save({name: "Eve"})._id;
|
|
||||||
/// knows.save(a, b, {});
|
|
||||||
/// knows.save(b, c, {});
|
|
||||||
/// knows.save(b, d, {});
|
|
||||||
/// knows.save(e, a, {});
|
|
||||||
/// knows.save(e, b, {});
|
|
||||||
/// var url = "/_api/traversal";
|
/// var url = "/_api/traversal";
|
||||||
/// var body = '{ "startVertex": "' + a + '", ';
|
/// var body = '{ "startVertex": "' + a + '", ';
|
||||||
/// body += '"edgeCollection" : "' + knows.name() + '", ';
|
/// body += '"graphName" : "' + g.__name + '", ';
|
||||||
/// body += '"direction" : "outbound"}';
|
/// body += '"direction" : "outbound"}';
|
||||||
///
|
///
|
||||||
/// var response = logCurlRequest('POST', url, body);
|
/// var response = logCurlRequest('POST', url, body);
|
||||||
/// assert(response.code === 200);
|
/// assert(response.code === 200);
|
||||||
///
|
///
|
||||||
/// logJsonResponse(response);
|
/// logJsonResponse(response);
|
||||||
/// db._drop(cv);
|
/// examples.dropGraph("knows_graph");
|
||||||
/// db._drop(ce);
|
|
||||||
/// @END_EXAMPLE_ARANGOSH_RUN
|
/// @END_EXAMPLE_ARANGOSH_RUN
|
||||||
///
|
///
|
||||||
/// Follow only inbound edges:
|
/// Follow only inbound edges:
|
||||||
///
|
///
|
||||||
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalInbound}
|
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalInbound}
|
||||||
/// var cv = "persons";
|
/// var examples = require("org/arangodb/graph-examples/example-graph.js");
|
||||||
/// var ce = "knows";
|
/// var g = examples.loadGraph("knows_graph");
|
||||||
/// db._drop(cv);
|
/// var a = g.persons.document("alice")._id;
|
||||||
/// db._drop(ce);
|
|
||||||
/// var users = db._create(cv);
|
|
||||||
/// var knows = db._createEdgeCollection(ce);
|
|
||||||
/// var a = users.save({name: "Alice"})._id;
|
|
||||||
/// var b = users.save({name: "Bob"})._id;
|
|
||||||
/// var c = users.save({name: "Charlie"})._id;
|
|
||||||
/// var d = users.save({name: "Dave"})._id;
|
|
||||||
/// var e = users.save({name: "Eve"})._id;
|
|
||||||
/// knows.save(a, b, {});
|
|
||||||
/// knows.save(b, c, {});
|
|
||||||
/// knows.save(b, d, {});
|
|
||||||
/// knows.save(e, a, {});
|
|
||||||
/// knows.save(e, b, {});
|
|
||||||
/// var url = "/_api/traversal";
|
/// var url = "/_api/traversal";
|
||||||
/// var body = '{ "startVertex": "' + a + '", ';
|
/// var body = '{ "startVertex": "' + a + '", ';
|
||||||
/// body += '"edgeCollection" : "' + knows.name() + '", ';
|
/// body += '"graphName" : "' + g.__name + '", ';
|
||||||
/// body += '"direction" : "inbound"}';
|
/// body += '"direction" : "inbound"}';
|
||||||
///
|
///
|
||||||
/// var response = logCurlRequest('POST', url, body);
|
/// var response = logCurlRequest('POST', url, body);
|
||||||
/// assert(response.code === 200);
|
/// assert(response.code === 200);
|
||||||
///
|
///
|
||||||
/// logJsonResponse(response);
|
/// logJsonResponse(response);
|
||||||
/// db._drop(cv);
|
/// examples.dropGraph("knows_graph");
|
||||||
/// db._drop(ce);
|
|
||||||
/// @END_EXAMPLE_ARANGOSH_RUN
|
/// @END_EXAMPLE_ARANGOSH_RUN
|
||||||
///
|
///
|
||||||
/// Follow any direction of edges:
|
/// Follow any direction of edges:
|
||||||
///
|
///
|
||||||
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalAny}
|
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalAny}
|
||||||
/// var cv = "persons";
|
/// var examples = require("org/arangodb/graph-examples/example-graph.js");
|
||||||
/// var ce = "knows";
|
/// var g = examples.loadGraph("knows_graph");
|
||||||
/// db._drop(cv);
|
/// var a = g.persons.document("alice")._id;
|
||||||
/// db._drop(ce);
|
|
||||||
/// var users = db._create(cv);
|
|
||||||
/// var knows = db._createEdgeCollection(ce);
|
|
||||||
/// var a = users.save({name: "Alice"})._id;
|
|
||||||
/// var b = users.save({name: "Bob"})._id;
|
|
||||||
/// var c = users.save({name: "Charlie"})._id;
|
|
||||||
/// var d = users.save({name: "Dave"})._id;
|
|
||||||
/// var e = users.save({name: "Eve"})._id;
|
|
||||||
/// knows.save(a, b, {});
|
|
||||||
/// knows.save(b, c, {});
|
|
||||||
/// knows.save(b, d, {});
|
|
||||||
/// knows.save(e, a, {});
|
|
||||||
/// knows.save(e, b, {});
|
|
||||||
/// var url = "/_api/traversal";
|
/// var url = "/_api/traversal";
|
||||||
/// var body = {
|
/// var body = {
|
||||||
/// startVertex: a,
|
/// startVertex: a,
|
||||||
/// edgeCollection: knows.name(),
|
/// graphName: g.__name,
|
||||||
/// direction: "any",
|
/// direction: "any",
|
||||||
/// uniqueness: {
|
/// uniqueness: {
|
||||||
/// vertices: "none",
|
/// vertices: "none",
|
||||||
|
@ -308,32 +270,18 @@ function notFound (req, res, code, message) {
|
||||||
/// assert(response.code === 200);
|
/// assert(response.code === 200);
|
||||||
///
|
///
|
||||||
/// logJsonResponse(response);
|
/// logJsonResponse(response);
|
||||||
/// db._drop(cv);
|
/// examples.dropGraph("knows_graph");
|
||||||
/// db._drop(ce);
|
|
||||||
/// @END_EXAMPLE_ARANGOSH_RUN
|
/// @END_EXAMPLE_ARANGOSH_RUN
|
||||||
///
|
///
|
||||||
/// Excluding `Charlie` and `Bob`:
|
/// Excluding `Charlie` and `Bob`:
|
||||||
///
|
///
|
||||||
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalFilterExclude}
|
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalFilterExclude}
|
||||||
/// var cv = "persons";
|
/// var examples = require("org/arangodb/graph-examples/example-graph.js");
|
||||||
/// var ce = "knows";
|
/// var g = examples.loadGraph("knows_graph");
|
||||||
/// db._drop(cv);
|
/// var a = g.persons.document("alice")._id;
|
||||||
/// db._drop(ce);
|
|
||||||
/// var users = db._create(cv);
|
|
||||||
/// var knows = db._createEdgeCollection(ce);
|
|
||||||
/// var a = users.save({name: "Alice"})._id;
|
|
||||||
/// var b = users.save({name: "Bob"})._id;
|
|
||||||
/// var c = users.save({name: "Charlie"})._id;
|
|
||||||
/// var d = users.save({name: "Dave"})._id;
|
|
||||||
/// var e = users.save({name: "Eve"})._id;
|
|
||||||
/// knows.save(a, b, {});
|
|
||||||
/// knows.save(b, c, {});
|
|
||||||
/// knows.save(b, d, {});
|
|
||||||
/// knows.save(e, a, {});
|
|
||||||
/// knows.save(e, b, {});
|
|
||||||
/// var url = "/_api/traversal";
|
/// var url = "/_api/traversal";
|
||||||
/// var body = '{ "startVertex": "' + a + '", ';
|
/// var body = '{ "startVertex": "' + a + '", ';
|
||||||
/// body += '"edgeCollection" : "' + knows.name() + '", ';
|
/// body += '"graphName" : "' + g.__name + '", ';
|
||||||
/// body += '"direction" : "outbound", ';
|
/// body += '"direction" : "outbound", ';
|
||||||
/// body += '"filter" : "if (vertex.name === \\"Bob\\" || ';
|
/// body += '"filter" : "if (vertex.name === \\"Bob\\" || ';
|
||||||
/// body += 'vertex.name === \\"Charlie\\") {';
|
/// body += 'vertex.name === \\"Charlie\\") {';
|
||||||
|
@ -345,32 +293,18 @@ function notFound (req, res, code, message) {
|
||||||
/// assert(response.code === 200);
|
/// assert(response.code === 200);
|
||||||
///
|
///
|
||||||
/// logJsonResponse(response);
|
/// logJsonResponse(response);
|
||||||
/// db._drop(cv);
|
/// examples.dropGraph("knows_graph");
|
||||||
/// db._drop(ce);
|
|
||||||
/// @END_EXAMPLE_ARANGOSH_RUN
|
/// @END_EXAMPLE_ARANGOSH_RUN
|
||||||
///
|
///
|
||||||
/// Do not follow edges from `Bob`:
|
/// Do not follow edges from `Bob`:
|
||||||
///
|
///
|
||||||
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalFilterPrune}
|
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalFilterPrune}
|
||||||
/// var cv = "persons";
|
/// var examples = require("org/arangodb/graph-examples/example-graph.js");
|
||||||
/// var ce = "knows";
|
/// var g = examples.loadGraph("knows_graph");
|
||||||
/// db._drop(cv);
|
/// var a = g.persons.document("alice")._id;
|
||||||
/// db._drop(ce);
|
|
||||||
/// var users = db._create(cv);
|
|
||||||
/// var knows = db._createEdgeCollection(ce);
|
|
||||||
/// var a = users.save({name: "Alice"})._id;
|
|
||||||
/// var b = users.save({name: "Bob"})._id;
|
|
||||||
/// var c = users.save({name: "Charlie"})._id;
|
|
||||||
/// var d = users.save({name: "Dave"})._id;
|
|
||||||
/// var e = users.save({name: "Eve"})._id;
|
|
||||||
/// knows.save(a, b, {});
|
|
||||||
/// knows.save(b, c, {});
|
|
||||||
/// knows.save(b, d, {});
|
|
||||||
/// knows.save(e, a, {});
|
|
||||||
/// knows.save(e, b, {});
|
|
||||||
/// var url = "/_api/traversal";
|
/// var url = "/_api/traversal";
|
||||||
/// var body = '{ "startVertex": "' + a + '", ';
|
/// var body = '{ "startVertex": "' + a + '", ';
|
||||||
/// body += '"edgeCollection" : "' + knows.name() + '", ';
|
/// body += '"graphName" : "' + g.__name + '", ';
|
||||||
/// body += '"direction" : "outbound", ';
|
/// body += '"direction" : "outbound", ';
|
||||||
/// body += '"filter" : "if (vertex.name === \\"Bob\\") {';
|
/// body += '"filter" : "if (vertex.name === \\"Bob\\") {';
|
||||||
/// body += 'return \\"prune\\";'
|
/// body += 'return \\"prune\\";'
|
||||||
|
@ -381,32 +315,18 @@ function notFound (req, res, code, message) {
|
||||||
/// assert(response.code === 200);
|
/// assert(response.code === 200);
|
||||||
///
|
///
|
||||||
/// logJsonResponse(response);
|
/// logJsonResponse(response);
|
||||||
/// db._drop(cv);
|
/// examples.dropGraph("knows_graph");
|
||||||
/// db._drop(ce);
|
|
||||||
/// @END_EXAMPLE_ARANGOSH_RUN
|
/// @END_EXAMPLE_ARANGOSH_RUN
|
||||||
///
|
///
|
||||||
/// Visit only nodes in a depth of at least 2:
|
/// Visit only nodes in a depth of at least 2:
|
||||||
///
|
///
|
||||||
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalMinDepth}
|
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalMinDepth}
|
||||||
/// var cv = "persons";
|
/// var examples = require("org/arangodb/graph-examples/example-graph.js");
|
||||||
/// var ce = "knows";
|
/// var g = examples.loadGraph("knows_graph");
|
||||||
/// db._drop(cv);
|
/// var a = g.persons.document("alice")._id;
|
||||||
/// db._drop(ce);
|
|
||||||
/// var users = db._create(cv);
|
|
||||||
/// var knows = db._createEdgeCollection(ce);
|
|
||||||
/// var a = users.save({name: "Alice"})._id;
|
|
||||||
/// var b = users.save({name: "Bob"})._id;
|
|
||||||
/// var c = users.save({name: "Charlie"})._id;
|
|
||||||
/// var d = users.save({name: "Dave"})._id;
|
|
||||||
/// var e = users.save({name: "Eve"})._id;
|
|
||||||
/// knows.save(a, b, {});
|
|
||||||
/// knows.save(b, c, {});
|
|
||||||
/// knows.save(b, d, {});
|
|
||||||
/// knows.save(e, a, {});
|
|
||||||
/// knows.save(e, b, {});
|
|
||||||
/// var url = "/_api/traversal";
|
/// var url = "/_api/traversal";
|
||||||
/// var body = '{ "startVertex": "' + a + '", ';
|
/// var body = '{ "startVertex": "' + a + '", ';
|
||||||
/// body += '"edgeCollection" : "' + knows.name() + '", ';
|
/// body += '"graphName" : "' + g.__name + '", ';
|
||||||
/// body += '"direction" : "outbound", ';
|
/// body += '"direction" : "outbound", ';
|
||||||
/// body += '"minDepth" : 2}';
|
/// body += '"minDepth" : 2}';
|
||||||
///
|
///
|
||||||
|
@ -414,32 +334,18 @@ function notFound (req, res, code, message) {
|
||||||
/// assert(response.code === 200);
|
/// assert(response.code === 200);
|
||||||
///
|
///
|
||||||
/// logJsonResponse(response);
|
/// logJsonResponse(response);
|
||||||
/// db._drop(cv);
|
/// examples.dropGraph("knows_graph");
|
||||||
/// db._drop(ce);
|
|
||||||
/// @END_EXAMPLE_ARANGOSH_RUN
|
/// @END_EXAMPLE_ARANGOSH_RUN
|
||||||
///
|
///
|
||||||
/// Visit only nodes in a depth of at most 1:
|
/// Visit only nodes in a depth of at most 1:
|
||||||
///
|
///
|
||||||
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalMaxDepth}
|
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalMaxDepth}
|
||||||
/// var cv = "persons";
|
/// var examples = require("org/arangodb/graph-examples/example-graph.js");
|
||||||
/// var ce = "knows";
|
/// var g = examples.loadGraph("knows_graph");
|
||||||
/// db._drop(cv);
|
/// var a = g.persons.document("alice")._id;
|
||||||
/// db._drop(ce);
|
|
||||||
/// var users = db._create(cv);
|
|
||||||
/// var knows = db._createEdgeCollection(ce);
|
|
||||||
/// var a = users.save({name: "Alice"})._id;
|
|
||||||
/// var b = users.save({name: "Bob"})._id;
|
|
||||||
/// var c = users.save({name: "Charlie"})._id;
|
|
||||||
/// var d = users.save({name: "Dave"})._id;
|
|
||||||
/// var e = users.save({name: "Eve"})._id;
|
|
||||||
/// knows.save(a, b, {});
|
|
||||||
/// knows.save(b, c, {});
|
|
||||||
/// knows.save(b, d, {});
|
|
||||||
/// knows.save(e, a, {});
|
|
||||||
/// knows.save(e, b, {});
|
|
||||||
/// var url = "/_api/traversal";
|
/// var url = "/_api/traversal";
|
||||||
/// var body = '{ "startVertex": "' + a + '", ';
|
/// var body = '{ "startVertex": "' + a + '", ';
|
||||||
/// body += '"edgeCollection" : "' + knows.name() + '", ';
|
/// body += '"graphName" : "' + g.__name + '", ';
|
||||||
/// body += '"direction" : "outbound", ';
|
/// body += '"direction" : "outbound", ';
|
||||||
/// body += '"maxDepth" : 1}';
|
/// body += '"maxDepth" : 1}';
|
||||||
///
|
///
|
||||||
|
@ -447,32 +353,18 @@ function notFound (req, res, code, message) {
|
||||||
/// assert(response.code === 200);
|
/// assert(response.code === 200);
|
||||||
///
|
///
|
||||||
/// logJsonResponse(response);
|
/// logJsonResponse(response);
|
||||||
/// db._drop(cv);
|
/// examples.dropGraph("knows_graph");
|
||||||
/// db._drop(ce);
|
|
||||||
/// @END_EXAMPLE_ARANGOSH_RUN
|
/// @END_EXAMPLE_ARANGOSH_RUN
|
||||||
///
|
///
|
||||||
/// Count all visited nodes and return a list of nodes only:
|
/// Count all visited nodes and return a list of nodes only:
|
||||||
///
|
///
|
||||||
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalVisitorCountAndList}
|
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalVisitorCountAndList}
|
||||||
/// var cv = "persons";
|
/// var examples = require("org/arangodb/graph-examples/example-graph.js");
|
||||||
/// var ce = "knows";
|
/// var g = examples.loadGraph("knows_graph");
|
||||||
/// db._drop(cv);
|
/// var a = g.persons.document("alice")._id;
|
||||||
/// db._drop(ce);
|
|
||||||
/// var users = db._create(cv);
|
|
||||||
/// var knows = db._createEdgeCollection(ce);
|
|
||||||
/// var a = users.save({name: "Alice"})._id;
|
|
||||||
/// var b = users.save({name: "Bob"})._id;
|
|
||||||
/// var c = users.save({name: "Charlie"})._id;
|
|
||||||
/// var d = users.save({name: "Dave"})._id;
|
|
||||||
/// var e = users.save({name: "Eve"})._id;
|
|
||||||
/// knows.save(a, b, {});
|
|
||||||
/// knows.save(b, c, {});
|
|
||||||
/// knows.save(b, d, {});
|
|
||||||
/// knows.save(e, a, {});
|
|
||||||
/// knows.save(e, b, {});
|
|
||||||
/// var url = "/_api/traversal";
|
/// var url = "/_api/traversal";
|
||||||
/// var body = '{ "startVertex": "' + a + '", ';
|
/// var body = '{ "startVertex": "' + a + '", ';
|
||||||
/// body += '"edgeCollection" : "' + knows.name() + '", ';
|
/// body += '"graphName" : "' + g.__name + '", ';
|
||||||
/// body += '"direction" : "outbound", ';
|
/// body += '"direction" : "outbound", ';
|
||||||
/// body += '"init" : "result.visited = 0; result.myVertices = [ ];", ';
|
/// body += '"init" : "result.visited = 0; result.myVertices = [ ];", ';
|
||||||
/// body += '"visitor" : "result.visited++; result.myVertices.push(vertex);"}';
|
/// body += '"visitor" : "result.visited++; result.myVertices.push(vertex);"}';
|
||||||
|
@ -481,36 +373,22 @@ function notFound (req, res, code, message) {
|
||||||
/// assert(response.code === 200);
|
/// assert(response.code === 200);
|
||||||
///
|
///
|
||||||
/// logJsonResponse(response);
|
/// logJsonResponse(response);
|
||||||
/// db._drop(cv);
|
/// examples.dropGraph("knows_graph");
|
||||||
/// db._drop(ce);
|
|
||||||
/// @END_EXAMPLE_ARANGOSH_RUN
|
/// @END_EXAMPLE_ARANGOSH_RUN
|
||||||
///
|
///
|
||||||
/// Expand only inbound edges of `Alice` and outbound edges of `Eve`:
|
/// Expand only inbound edges of `Alice` and outbound edges of `Eve`:
|
||||||
///
|
///
|
||||||
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalVisitorExpander}
|
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalVisitorExpander}
|
||||||
/// var cv = "persons";
|
/// var examples = require("org/arangodb/graph-examples/example-graph.js");
|
||||||
/// var ce = "knows";
|
/// var g = examples.loadGraph("knows_graph");
|
||||||
/// db._drop(cv);
|
/// var a = g.persons.document("alice")._id;
|
||||||
/// db._drop(ce);
|
|
||||||
/// var users = db._create(cv);
|
|
||||||
/// var knows = db._createEdgeCollection(ce);
|
|
||||||
/// var a = users.save({name: "Alice"})._id;
|
|
||||||
/// var b = users.save({name: "Bob"})._id;
|
|
||||||
/// var c = users.save({name: "Charlie"})._id;
|
|
||||||
/// var d = users.save({name: "Dave"})._id;
|
|
||||||
/// var e = users.save({name: "Eve"})._id;
|
|
||||||
/// knows.save(a, b, {});
|
|
||||||
/// knows.save(b, c, {});
|
|
||||||
/// knows.save(b, d, {});
|
|
||||||
/// knows.save(e, a, {});
|
|
||||||
/// knows.save(e, b, {});
|
|
||||||
/// var url = "/_api/traversal";
|
/// var url = "/_api/traversal";
|
||||||
/// var body = {
|
/// var body = {
|
||||||
/// startVertex: a,
|
/// startVertex: a,
|
||||||
/// edgeCollection: knows.name(),
|
/// graphName: g.__name,
|
||||||
/// expander: "var connections = [ ];" +
|
/// expander: "var connections = [ ];" +
|
||||||
/// "if (vertex.name === \"Alice\") {" +
|
/// "if (vertex.name === \"Alice\") {" +
|
||||||
/// "config.edgeCollection.inEdges(vertex).forEach(function (e) {" +
|
/// "config.getInEdges(vertex).forEach(function (e) {" +
|
||||||
/// "connections.push({ " +
|
/// "connections.push({ " +
|
||||||
/// "vertex: require(\"internal\").db._document(e._from), " +
|
/// "vertex: require(\"internal\").db._document(e._from), " +
|
||||||
/// "edge: e" +
|
/// "edge: e" +
|
||||||
|
@ -518,7 +396,7 @@ function notFound (req, res, code, message) {
|
||||||
/// "});" +
|
/// "});" +
|
||||||
/// "}" +
|
/// "}" +
|
||||||
/// "if (vertex.name === \"Eve\") {" +
|
/// "if (vertex.name === \"Eve\") {" +
|
||||||
/// "config.edgeCollection.outEdges(vertex).forEach(function (e) {" +
|
/// "config.getOutEdges(vertex).forEach(function (e) {" +
|
||||||
/// "connections.push({" +
|
/// "connections.push({" +
|
||||||
/// "vertex: require(\"internal\").db._document(e._to), " +
|
/// "vertex: require(\"internal\").db._document(e._to), " +
|
||||||
/// "edge: e" +
|
/// "edge: e" +
|
||||||
|
@ -532,33 +410,19 @@ function notFound (req, res, code, message) {
|
||||||
/// assert(response.code === 200);
|
/// assert(response.code === 200);
|
||||||
///
|
///
|
||||||
/// logJsonResponse(response);
|
/// logJsonResponse(response);
|
||||||
/// db._drop(cv);
|
/// examples.dropGraph("knows_graph");
|
||||||
/// db._drop(ce);
|
|
||||||
/// @END_EXAMPLE_ARANGOSH_RUN
|
/// @END_EXAMPLE_ARANGOSH_RUN
|
||||||
///
|
///
|
||||||
/// Follow the `depthfirst` strategy:
|
/// Follow the `depthfirst` strategy:
|
||||||
///
|
///
|
||||||
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalDepthFirst}
|
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalDepthFirst}
|
||||||
/// var cv = "persons";
|
/// var examples = require("org/arangodb/graph-examples/example-graph.js");
|
||||||
/// var ce = "knows";
|
/// var g = examples.loadGraph("knows_graph");
|
||||||
/// db._drop(cv);
|
/// var a = g.persons.document("alice")._id;
|
||||||
/// db._drop(ce);
|
|
||||||
/// var users = db._create(cv);
|
|
||||||
/// var knows = db._createEdgeCollection(ce);
|
|
||||||
/// var a = users.save({name: "Alice"})._id;
|
|
||||||
/// var b = users.save({name: "Bob"})._id;
|
|
||||||
/// var c = users.save({name: "Charlie"})._id;
|
|
||||||
/// var d = users.save({name: "Dave"})._id;
|
|
||||||
/// var e = users.save({name: "Eve"})._id;
|
|
||||||
/// knows.save(a, b, {});
|
|
||||||
/// knows.save(b, c, {});
|
|
||||||
/// knows.save(b, d, {});
|
|
||||||
/// knows.save(e, a, {});
|
|
||||||
/// knows.save(e, b, {});
|
|
||||||
/// var url = "/_api/traversal";
|
/// var url = "/_api/traversal";
|
||||||
/// var body = {
|
/// var body = {
|
||||||
/// startVertex: a,
|
/// startVertex: a,
|
||||||
/// edgeCollection: knows.name(),
|
/// graphName: g.__name,
|
||||||
/// direction: "any",
|
/// direction: "any",
|
||||||
/// strategy: "depthfirst"
|
/// strategy: "depthfirst"
|
||||||
/// };
|
/// };
|
||||||
|
@ -567,33 +431,19 @@ function notFound (req, res, code, message) {
|
||||||
/// assert(response.code === 200);
|
/// assert(response.code === 200);
|
||||||
///
|
///
|
||||||
/// logJsonResponse(response);
|
/// logJsonResponse(response);
|
||||||
/// db._drop(cv);
|
/// examples.dropGraph("knows_graph");
|
||||||
/// db._drop(ce);
|
|
||||||
/// @END_EXAMPLE_ARANGOSH_RUN
|
/// @END_EXAMPLE_ARANGOSH_RUN
|
||||||
///
|
///
|
||||||
/// Using `postorder` ordering:
|
/// Using `postorder` ordering:
|
||||||
///
|
///
|
||||||
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalPostorder}
|
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalPostorder}
|
||||||
/// var cv = "persons";
|
/// var examples = require("org/arangodb/graph-examples/example-graph.js");
|
||||||
/// var ce = "knows";
|
/// var g = examples.loadGraph("knows_graph");
|
||||||
/// db._drop(cv);
|
/// var a = g.persons.document("alice")._id;
|
||||||
/// db._drop(ce);
|
|
||||||
/// var users = db._create(cv);
|
|
||||||
/// var knows = db._createEdgeCollection(ce);
|
|
||||||
/// var a = users.save({name: "Alice"})._id;
|
|
||||||
/// var b = users.save({name: "Bob"})._id;
|
|
||||||
/// var c = users.save({name: "Charlie"})._id;
|
|
||||||
/// var d = users.save({name: "Dave"})._id;
|
|
||||||
/// var e = users.save({name: "Eve"})._id;
|
|
||||||
/// knows.save(a, b, {});
|
|
||||||
/// knows.save(b, c, {});
|
|
||||||
/// knows.save(b, d, {});
|
|
||||||
/// knows.save(e, a, {});
|
|
||||||
/// knows.save(e, b, {});
|
|
||||||
/// var url = "/_api/traversal";
|
/// var url = "/_api/traversal";
|
||||||
/// var body = {
|
/// var body = {
|
||||||
/// startVertex: a,
|
/// startVertex: a,
|
||||||
/// edgeCollection: knows.name(),
|
/// graphName: g.__name,
|
||||||
/// direction: "any",
|
/// direction: "any",
|
||||||
/// order: "postorder"
|
/// order: "postorder"
|
||||||
/// };
|
/// };
|
||||||
|
@ -602,29 +452,15 @@ function notFound (req, res, code, message) {
|
||||||
/// assert(response.code === 200);
|
/// assert(response.code === 200);
|
||||||
///
|
///
|
||||||
/// logJsonResponse(response);
|
/// logJsonResponse(response);
|
||||||
/// db._drop(cv);
|
/// examples.dropGraph("knows_graph");
|
||||||
/// db._drop(ce);
|
|
||||||
/// @END_EXAMPLE_ARANGOSH_RUN
|
/// @END_EXAMPLE_ARANGOSH_RUN
|
||||||
///
|
///
|
||||||
/// Using `backward` item-ordering:
|
/// Using `backward` item-ordering:
|
||||||
///
|
///
|
||||||
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalBackwardItemOrder}
|
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalBackwardItemOrder}
|
||||||
/// var cv = "persons";
|
/// var examples = require("org/arangodb/graph-examples/example-graph.js");
|
||||||
/// var ce = "knows";
|
/// var g = examples.loadGraph("knows_graph");
|
||||||
/// db._drop(cv);
|
/// var a = g.persons.document("alice")._id;
|
||||||
/// db._drop(ce);
|
|
||||||
/// var users = db._create(cv);
|
|
||||||
/// var knows = db._createEdgeCollection(ce);
|
|
||||||
/// var a = users.save({name: "Alice"})._id;
|
|
||||||
/// var b = users.save({name: "Bob"})._id;
|
|
||||||
/// var c = users.save({name: "Charlie"})._id;
|
|
||||||
/// var d = users.save({name: "Dave"})._id;
|
|
||||||
/// var e = users.save({name: "Eve"})._id;
|
|
||||||
/// knows.save(a, b, {});
|
|
||||||
/// knows.save(b, c, {});
|
|
||||||
/// knows.save(b, d, {});
|
|
||||||
/// knows.save(e, a, {});
|
|
||||||
/// knows.save(e, b, {});
|
|
||||||
/// var url = "/_api/traversal";
|
/// var url = "/_api/traversal";
|
||||||
/// var body = {
|
/// var body = {
|
||||||
/// startVertex: a,
|
/// startVertex: a,
|
||||||
|
@ -637,34 +473,20 @@ function notFound (req, res, code, message) {
|
||||||
/// assert(response.code === 200);
|
/// assert(response.code === 200);
|
||||||
///
|
///
|
||||||
/// logJsonResponse(response);
|
/// logJsonResponse(response);
|
||||||
/// db._drop(cv);
|
/// examples.dropGraph("knows_graph");
|
||||||
/// db._drop(ce);
|
|
||||||
/// @END_EXAMPLE_ARANGOSH_RUN
|
/// @END_EXAMPLE_ARANGOSH_RUN
|
||||||
///
|
///
|
||||||
/// Edges should only be included once globally,
|
/// Edges should only be included once globally,
|
||||||
/// but nodes are included every time they are visited:
|
/// but nodes are included every time they are visited:
|
||||||
///
|
///
|
||||||
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalEdgeUniqueness}
|
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalEdgeUniqueness}
|
||||||
/// var cv = "persons";
|
/// var examples = require("org/arangodb/graph-examples/example-graph.js");
|
||||||
/// var ce = "knows";
|
/// var g = examples.loadGraph("knows_graph");
|
||||||
/// db._drop(cv);
|
/// var a = g.persons.document("alice")._id;
|
||||||
/// db._drop(ce);
|
|
||||||
/// var users = db._create(cv);
|
|
||||||
/// var knows = db._createEdgeCollection(ce);
|
|
||||||
/// var a = users.save({name: "Alice"})._id;
|
|
||||||
/// var b = users.save({name: "Bob"})._id;
|
|
||||||
/// var c = users.save({name: "Charlie"})._id;
|
|
||||||
/// var d = users.save({name: "Dave"})._id;
|
|
||||||
/// var e = users.save({name: "Eve"})._id;
|
|
||||||
/// knows.save(a, b, {});
|
|
||||||
/// knows.save(b, c, {});
|
|
||||||
/// knows.save(b, d, {});
|
|
||||||
/// knows.save(e, a, {});
|
|
||||||
/// knows.save(e, b, {});
|
|
||||||
/// var url = "/_api/traversal";
|
/// var url = "/_api/traversal";
|
||||||
/// var body = {
|
/// var body = {
|
||||||
/// startVertex: a,
|
/// startVertex: a,
|
||||||
/// edgeCollection: knows.name(),
|
/// graphName: g.__name,
|
||||||
/// direction: "any",
|
/// direction: "any",
|
||||||
/// uniqueness: {
|
/// uniqueness: {
|
||||||
/// vertices: "none",
|
/// vertices: "none",
|
||||||
|
@ -676,8 +498,7 @@ function notFound (req, res, code, message) {
|
||||||
/// assert(response.code === 200);
|
/// assert(response.code === 200);
|
||||||
///
|
///
|
||||||
/// logJsonResponse(response);
|
/// logJsonResponse(response);
|
||||||
/// db._drop(cv);
|
/// examples.dropGraph("knows_graph");
|
||||||
/// db._drop(ce);
|
|
||||||
/// @END_EXAMPLE_ARANGOSH_RUN
|
/// @END_EXAMPLE_ARANGOSH_RUN
|
||||||
///
|
///
|
||||||
/// If the underlying graph is cyclic, `maxIterations` should be set:
|
/// If the underlying graph is cyclic, `maxIterations` should be set:
|
||||||
|
@ -689,20 +510,17 @@ function notFound (req, res, code, message) {
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalMaxIterations}
|
/// @EXAMPLE_ARANGOSH_RUN{RestTraversalMaxIterations}
|
||||||
/// var cv = "persons";
|
/// var examples = require("org/arangodb/graph-examples/example-graph.js");
|
||||||
/// var ce = "knows";
|
/// var g = examples.loadGraph("knows_graph");
|
||||||
/// db._drop(cv);
|
/// var a = g.persons.document("alice")._id;
|
||||||
/// db._drop(ce);
|
/// var b = g.persons.document("bob")._id;
|
||||||
/// var users = db._create(cv);
|
/// g.knows.truncate();
|
||||||
/// var knows = db._createEdgeCollection(ce);
|
/// g.knows.save(a, b, {});
|
||||||
/// var a = users.save({name: "Alice"})._id;
|
/// g.knows.save(b, a, {});
|
||||||
/// var b = users.save({name: "Bob"})._id;
|
|
||||||
/// knows.save(a, b, {});
|
|
||||||
/// knows.save(b, a, {});
|
|
||||||
/// var url = "/_api/traversal";
|
/// var url = "/_api/traversal";
|
||||||
/// var body = {
|
/// var body = {
|
||||||
/// startVertex: a,
|
/// startVertex: a,
|
||||||
/// edgeCollection: knows.name(),
|
/// graphName: g.__name,
|
||||||
/// direction: "any",
|
/// direction: "any",
|
||||||
/// uniqueness: {
|
/// uniqueness: {
|
||||||
/// vertices: "none",
|
/// vertices: "none",
|
||||||
|
@ -715,8 +533,7 @@ function notFound (req, res, code, message) {
|
||||||
/// assert(response.code === 500);
|
/// assert(response.code === 500);
|
||||||
///
|
///
|
||||||
/// logJsonResponse(response);
|
/// logJsonResponse(response);
|
||||||
/// db._drop(cv);
|
/// examples.dropGraph("knows_graph");
|
||||||
/// db._drop(ce);
|
|
||||||
/// @END_EXAMPLE_ARANGOSH_RUN
|
/// @END_EXAMPLE_ARANGOSH_RUN
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -743,26 +560,43 @@ function post_api_traversal(req, res) {
|
||||||
return notFound(req, res, arangodb.ERROR_ARANGO_DOCUMENT_NOT_FOUND, "invalid startVertex");
|
return notFound(req, res, arangodb.ERROR_ARANGO_DOCUMENT_NOT_FOUND, "invalid startVertex");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var datasource;
|
||||||
|
var edgeCollection;
|
||||||
|
|
||||||
|
if (json.graphName === undefined) {
|
||||||
// check edge collection
|
// check edge collection
|
||||||
// -----------------------------------------
|
// -----------------------------------------
|
||||||
|
|
||||||
if (json.edgeCollection === undefined ||
|
if (json.edgeCollection === undefined) {
|
||||||
typeof json.edgeCollection !== "string") {
|
return badParam(req, res, "missing graphname");
|
||||||
return badParam(req, res, "missing or invalid edgeCollection");
|
}
|
||||||
|
if (typeof json.edgeCollection !== "string") {
|
||||||
|
return badParam(req, res, "invalid edgecollection");
|
||||||
}
|
}
|
||||||
|
|
||||||
var edgeCollection;
|
|
||||||
try {
|
try {
|
||||||
edgeCollection = db._collection(json.edgeCollection);
|
edgeCollection = db._collection(json.edgeCollection);
|
||||||
|
datasource = traversal.collectionDatasourceFactory(edgeCollection);
|
||||||
}
|
}
|
||||||
catch (err2) {
|
catch (ignore) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (edgeCollection === undefined ||
|
if (edgeCollection === undefined ||
|
||||||
edgeCollection === null) {
|
edgeCollection === null) {
|
||||||
return notFound(req, res, arangodb.ERROR_ARANGO_COLLECTION_NOT_FOUND, "invalid edgeCollection");
|
return notFound(req, res, arangodb.ERROR_ARANGO_COLLECTION_NOT_FOUND,
|
||||||
|
"invalid edgeCollection");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else if (typeof json.graphName !== "string") {
|
||||||
|
return badParam(req, res, "invalid graphname");
|
||||||
|
} else {
|
||||||
|
if (!graph._exists(json.graphName)) {
|
||||||
|
return badParam(req, res, "invalid graphname");
|
||||||
|
}
|
||||||
|
datasource = traversal.generalGraphDatasourceFactory(json.graphName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// set up filters
|
// set up filters
|
||||||
// -----------------------------------------
|
// -----------------------------------------
|
||||||
|
|
||||||
|
@ -844,8 +678,7 @@ function post_api_traversal(req, res) {
|
||||||
|
|
||||||
var config = {
|
var config = {
|
||||||
params: json,
|
params: json,
|
||||||
edgeCollection: edgeCollection,
|
datasource: datasource,
|
||||||
datasource: traversal.collectionDatasourceFactory(edgeCollection),
|
|
||||||
strategy: json.strategy,
|
strategy: json.strategy,
|
||||||
order: json.order,
|
order: json.order,
|
||||||
itemOrder: json.itemOrder,
|
itemOrder: json.itemOrder,
|
||||||
|
@ -859,6 +692,10 @@ function post_api_traversal(req, res) {
|
||||||
uniqueness: json.uniqueness
|
uniqueness: json.uniqueness
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (edgeCollection !== undefined) {
|
||||||
|
config.edgeCollection = edgeCollection;
|
||||||
|
}
|
||||||
|
|
||||||
// assemble result object
|
// assemble result object
|
||||||
// -----------------------------------------
|
// -----------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,23 @@
|
||||||
|
|
||||||
var Graph = require("org/arangodb/general-graph");
|
var Graph = require("org/arangodb/general-graph");
|
||||||
|
|
||||||
|
var createTraversalExample = function() {
|
||||||
|
var g = Graph._create("knows_graph",
|
||||||
|
[Graph._undirectedRelationDefinition("knows", "persons")]
|
||||||
|
);
|
||||||
|
var a = g.persons.save({name: "Alice", _key: "alice"})._id;
|
||||||
|
var b = g.persons.save({name: "Bob", _key: "bob"})._id;
|
||||||
|
var c = g.persons.save({name: "Charlie", _key: "charlie"})._id;
|
||||||
|
var d = g.persons.save({name: "Dave", _key: "dave"})._id;
|
||||||
|
var e = g.persons.save({name: "Eve", _key: "eve"})._id;
|
||||||
|
g.knows.save(a, b, {});
|
||||||
|
g.knows.save(b, c, {});
|
||||||
|
g.knows.save(b, d, {});
|
||||||
|
g.knows.save(e, a, {});
|
||||||
|
g.knows.save(e, b, {});
|
||||||
|
return g;
|
||||||
|
};
|
||||||
|
|
||||||
var createSocialGraph = function() {
|
var createSocialGraph = function() {
|
||||||
var edgeDefinition = [];
|
var edgeDefinition = [];
|
||||||
edgeDefinition.push(Graph._undirectedRelationDefinition("relation", ["female", "male"]));
|
edgeDefinition.push(Graph._undirectedRelationDefinition("relation", ["female", "male"]));
|
||||||
|
@ -72,14 +89,15 @@
|
||||||
|
|
||||||
|
|
||||||
var dropGraph = function(name) {
|
var dropGraph = function(name) {
|
||||||
return Graph._drop(name);
|
if (Graph._exists(name)) {
|
||||||
|
return Graph._drop(name, true);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var loadGraph = function(name) {
|
var loadGraph = function(name) {
|
||||||
if (Graph._exists(name)) {
|
|
||||||
dropGraph(name);
|
|
||||||
}
|
|
||||||
switch (name) {
|
switch (name) {
|
||||||
|
case "knows_graph":
|
||||||
|
return createTraversalExample();
|
||||||
case "routeplanner":
|
case "routeplanner":
|
||||||
return createRoutePlannerGraph();
|
return createRoutePlannerGraph();
|
||||||
case "social":
|
case "social":
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
/// Copyright holder is triAGENS GmbH, Cologne, Germany
|
/// Copyright holder is triAGENS GmbH, Cologne, Germany
|
||||||
///
|
///
|
||||||
/// @author Jan Steemann
|
/// @author Jan Steemann
|
||||||
|
/// @author Michael Hackstein
|
||||||
/// @author Copyright 2011-2013, triAGENS GmbH, Cologne, Germany
|
/// @author Copyright 2011-2013, triAGENS GmbH, Cologne, Germany
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -47,7 +48,7 @@ var ArangoTraverser;
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
function clone (obj) {
|
function clone (obj) {
|
||||||
if (obj === null || typeof(obj) !== "object") {
|
if (obj === null || typeof obj !== "object") {
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue