Waterline ORM adapter for ArangoDB.
JavaScript
Latest commit e886762 Jan 4, 2017 @gbevan gbevan committed with Fix upgrade with complex objects. Support pagination, sorting. (#21)
* fixed collection init and report any error returned
* fix to update with complex objects
* fixed $select (field selection) on find()
* added support for skip and limit for pagination
* debug for update parameters
* cleanup some debugging / noise on startup
* added sort support in find()
* removed p2 ref

README.md

image_squidhome@2x.png

sails-arangodb

Provides easy access to ArangoDB from Sails.js & Waterline.

Take a look at sails-arangodb-demo for more up-to-date examples.

This module is a Waterline/Sails adapter, an early implementation of a rapidly-developing, tool-agnostic data standard. Its goal is to provide a set of declarative interfaces, conventions, and best-practices for integrating with all sorts of data sources. Not just database s-- external APIs, proprietary web services, or even hardware.

Strict adherence to an adapter specification enables the (re)use of built-in generic test suites, standardized documentation, reasonable expectations around the API for your users, and overall, a more pleasant development experience for everyone.

This adapter has been developed pretty quickly and may contain bugs.

Installation

To install this adapter, run:

$ npm install sails-arangodb

Usage

This adapter exposes the following methods:

find()
create()
update()
destroy()
neighbors() # Experimental, method signature is subject to change
createEdge() # Experimental, method signature is subject to change
deleteEdge() # Experimental, method signature is subject to change

Connection

Check out Connections in the Sails docs, or see the config/connections.js file in a new Sails project for information on setting up adapters.

in connection.js

localArangoDB: {
    adapter: 'sails-arangodb',

    host: 'localhost',
    port: 8529,

    user: 'root',
    password: 'CgdYW3zBLy5yCszR',

    database: '_system'

    graph: 'examplegraph'            // ArangoDB specific
    collection: 'examplecollection'  // ArangoDB specific
}

Older doc

Example model definitions

/**
 * User Model
 *
 * The User model represents the schema of authentication data
 */
module.exports = {

    // Enforce model schema in the case of schemaless databases
    schema: true,
    tableName: 'User',
    attributes: {
        id: {
            type: 'string',
            primaryKey: true,
            columnName: '_key'
        },
        username: {
            type: 'string',
            unique: true
        },
        email: {
            type: 'email',
            unique: true
        },
        profile: {
            collection: 'Profile',
            via: 'user',
            edge: 'userCommented'
        }
    }
};
// api/models/Profile.js
module.exports = {
    tableName: 'profile',
    attributes: {
        id: {
            type: 'string',
            primaryKey: true,
            columnName: '_key'
        },
        user: {
            model: "User",
            required: true
        },
        familyName: {
            type: 'string'
        },
        givenName: {
            type: 'string'
        },
        profilePic: {
            type: 'string'
        }
    }
    }

// api/models/User.js
module.exports = {
    tableName: 'user',
    attributes: {
        id: {
            type: 'string',
            primaryKey: true,
            columnName: '_key'
        },
        username: {
            type: 'string'
        },
        profile: {
            collection: 'profile',
            via: 'user',
            edge: 'profileOf'
        }
    }
};
;

License

MIT © 2016 Gabriel Letarte (gabriel-letarte) & [thanks to] Taneli Leppä (rosmo) & [thanks to] vjsrinath & [thanks to] balderdashy, Mike McNeil, Balderdash & contributors

This adapter has been developed using vjsrinath's sails-orientdb as a template.

Sails is free and open-source under the MIT License.