npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ogmneo

v1.0.6

Published

OGM(object-graph mapping) abstraction layer for neo4j

Downloads

406

Readme

OGMNeo

Abstract some trivial operations on the Neo4j driver for Nodejs and make the use simpler. That's why we created OGMNeo.

npm version npm MIT Travis Codecov Twitter

Installation

You can find ogmneo in npm here and install using the follow command

 npm install ogmneo

Usage

Connecting to neo4j database

const ogmneo = require('ogmneo');
ogmneo.Connection.connect('neo4j', 'databasepass', 'localhost');
// Or if you want to add some neo4j driver configuration options 
ogmneo.Connection.connect('neo4j', 'databasepass', 'localhost', { maxTransactionRetryTime: 30000, encrypted: false });
// See more about the config options you can add on: http://neo4j.com/docs/api/javascript-driver/current/function/index.html#static-function-driver

OGMNeo connects using the neo4j bolt protocol.

Log generated cypher on console

You can see the generated Cypher on your console by setting Connection.logCypherEnabled property true.

const ogmneo = require('ogmneo');
ogmneo.Connection.logCypherEnabled = true;

Create node example

  const ogmneo = require('ogmneo');
  
  ogmneo.Node.create({ name: 'name', tes: 3 }, 'test')
  .then((node) => {
       //Created returned object => {id: 1, name: 'name', tes: 3}
  }).catch((error) => {
       //Handle error
  });

Find Nodes

  const ogmneo = require('ogmneo');
  
  let query = ogmneo.Query.create('test')
                             .where(new ogmneo.Where('name', { $eq: 'name1' }));

  ogmneo.Node.find(query)
  .then((nodes) => {
      //Found nodes.
  }).catch((error) => {
      //Handle error.
  });

Create relations

You can create relations between nodes.

  const ogmneo = require('ogmneo');
  ogmneo.Relation.relate(node1.id, 'relatedto', node2.id, {property: 'a'})
  .then((rels) => {
        // Created relation node {id: 2, type: 'relatedto', property: 'a'}
  }).catch((error) => {
        //Handle error
  });

Find Relations

You can find the relation nodes.

  const ogmneo = require('ogmneo');
  
  let query = ogmneo.RelationQuery.create('relatedto')
                                 .startNode(node1.id)
                                 .endNode(node2.id)
                                 .relationWhere(ogmneo.Where.create('property', { $eq: 'c' }))
                                 .ascOrderBy('property')
                                 .limit(3);
  ogmneo.Relation.find(query)
  .then((nodes) => {
        //Found relation nodes.
  }).catch((error) => {
        //Handle error.
  });
  
  //OR
  
  ogmneo.Relation.findPopulated(query)
  .then((nodes) => {
        //Found relation nodes with start and end nodes populated.
  }).catch((error) => {
        //Handle error.
  });
  

Executing Cypher

You can execute Cypher using the direct Neo4j Driver session object. Or you can use OGMNeoCypher.

  const ogmneo = require('ogmneo');

  ogmneo.Cypher.transactionalRead(cypherStatement)
  .then((result) => {
     console.log(result);
  }).catch((error) => {
     reject(error);
  });
  
  //OR
   ogmneo.Cypher.transactionalWrite(cypherStatement)
  .then((result) => {
     console.log(result);
  }).catch((error) => {
     reject(error);
  });
  

Creating and dropping indexes

You can create and drop indexes in properties.

  const ogmneo = require('ogmneo');
  //Creating
  ogmneo.Index.create('label', ['property'])
  .then((result) => {
     //Handle creation
  });
  //Dropping
  ogmneo.Index.drop('label', ['property'])
  .then((result) => {
     //Handle drop
  });

Operation API

Almost every method of ogmneo.Node and ogmneo.Relation have now the Operation API, that instead of executing the function on database returning a promise, it creates an ogmneo.Operation object that can be executed after by the ogmneo.OperationExecuter. Exemple:

  const ogmneo = require('ogmneo');
  
  let operation = ogmneo.Node.createOperation({ name: 'name', tes: 3 }, 'test');
  ogmneo.OperationExecuter.execute(operation)
  .then((node) => {
       //Created returned object => {id: 1, name: 'name', tes: 3}
  }).catch((error) => {
       //Handle error
  });

Transactional API

With the Operation API we can now execute as many READ or WRITE operations on the same transaction. For example, you want to create nodes and then relate those two. But if the relationship operation fails you want to rollback all the operations.

  const ogmneo = require('ogmneo');
  
  let createDriver = ogmneo.Node.createOperation({name: 'Ayrton Senna', carNumber: 12 }, 'Driver');
  ogmneo.OperationExecuter.write((transaction) => {
        return ogmneo.OperationExecuter.execute(createDriver, transaction)
                               .then((driver) => {
                                    let createCar = ogmneo.Node.createOperation({name: 'MP4/4'}, 'Car');
                                    return ogmneo.OperationExecuter.execute(createCar, transaction).then((car) => {
                                       let relate = ogmneo.Relation.relateOperation(driver.id, 'DRIVES', car.id, {year: 1988});
                                       return ogmneo.OperationExecuter.execute(relate, transaction);
                                    });
                               });
    }).then((result) => {
       //Result here
    });

All of those operations will be executed on the same transaction and you can rollback anytime you want. The transaction is the neo4j driver transaction object and you can see more about it on their docs here.

Batching operation in a single transaction

You can also batch many operation READ or WRITE operations in a single transaction.

    const ogmneo = require('ogmneo');
  
    let createUser1 = OGMNeoNode.createOperation({name: 'Ayrton Senna'}, 'Person');
    let createUser2 = OGMNeoNode.createOperation({name: 'Alain Prost'}, 'Person');

    ogmneo.OperationExecuter.batchWriteOperations([createUser1, createUser2]).then((result) => {
        let created1 = result[0];
        let created2 = result[1];
        console.log(created1.name); // 'Ayrton Senna'
        console.log(created2.name); // 'Alain Prost'
    });

If one of those fails, all other operations on the transaction will be rolledback automatically.

Documentation

See the full API documentation at docs. All docs was generated by JSDoc.

Exemple

See a demo sample on the ogmneo-demo repository.

Tests

Most of this library functions are covered by unit tests. See the code coverage on codecov.io.

Licence

OGMNeo is released under the MIT License.