Learn about our RFC process, Open RFC meetings & more.Join in the discussion! »

moneo

1.1.2 • Public • Published

moneo

Mongoose -> Neo4J plugin / middleware Build Status

Required:

  • node / iojs
  • mongoose

Installation


$ npm i -S moneo


-- View on npmjs

Usage

 
var moneo = require("moneo")({url:'http://localhost:7474'});
 
SomeSchema.plugin(moneo);
 

!!! Connection string must of course be changed... !!!

Supported functionality

To mark schema property to be stored into a neo4j node property add nodeProperty: true. Default is false. e.g.

 
SomeSchema = mongoose.Schema({
    firstName: {type: String, nodeProperty: true}, // Will be persisted to neo4j 
    lastName: {type: String, nodeProperty: true}, // Will be persisted to neo4j
    mongoSpecificValue1: {type: String, nodeProperty: false}, // Will not be persisted to neo4j
    mongoSpecificValue2: String // Will not be persisted to neo4j
});
 

Simple ref properties will be used to create relations. Use relName:'Relation Name' to specify relation name. e.g.

 
SomeSchema = mongoose.Schema({
    teacher: {type: mongoose.Schema.ObjectId, ref: 'OtherSchema', relName: "Taught By"},
});
 

A nested schema including a ref property will be used to create relations with properties. e.g.

 
SomeSchema = mongoose.Schema({
    supervisor: {
        person: {type: mongoose.Schema.ObjectId, ref: 'OtherSchema', relName: "Supervised By"},
        startDate: Date
    },
});
 

Array of ref properties will be used to create multiple relations. e.g.

 
SomeSchema = mongoose.Schema({
    students: [{type: mongoose.Schema.ObjectId, ref: 'OtherSchema', relName: 'Teaches'}]
});
 

Array of objects that include a ref property will be used to create multiple relations with relation properties. e.g.

 
SomeSchema = mongoose.Schema({
    takenClasses: [{
        class: {type: mongoose.Schema.ObjectId, ref: 'OtherSchema',relName:'Takes Class'},
        grade: Number,
        year: Number
    }]
});
 

To run a cypher query the static model cypherQuery(opts,cb,_tx) function can be used. It behaves the same as neo4j.GraphDatabase.cypher(options,cb,_tx). e.g.

 
SomeModel.cypherQuery({query: 'match (n:Person)-[r:Takes_Class]-(c:Class) return n,r,c'}, function (err, res)     {
    // if ok - res contains results...
});
 

Contributions

Since this is very new code.... I expect bugs.... so please open issues!

If you wish to contribute - Please:

  • Keep my code style
  • Add/maintain tests
  • Don't break what you can't fix :)

License:

MIT

Install

npm i moneo

DownloadsWeekly Downloads

9

Version

1.1.2

License

MIT

Last publish

Collaborators

  • avatar