0.3.12 • Published 6 years ago

uon.db v0.3.12

Weekly downloads
2
License
MIT
Repository
github
Last release
6 years ago

UON DB

A MongoDB assignment-time model validation library written in ES6.

Usage

npm install uon.db
const uon_db = require('uon.db');

uon_db.connect('mongodb://localhost:27017/mydb').then((db) => {
	// use db
	...
});

Model Definition

We define a persistent model be inheriting from Model like so :

const Model = require('uon.db').Model;

class MyModel extends Model {
	constructor(data) {
		super(data);
	}
}

Before we can use it, we must define a schema, this is done like so :

MyModel.DefineSchema({
	field1 : String
	field2 : Number
});

You can provide more options for every field by passing an object with, at minimum, a 'type' attribute

MyModel.DefineSchema({
	field1 : {
		type : String,
		default : 'some string',
		pattern : /[a-zA-Z]/,
		format : function(str) {
			return str.toUpperCase();
		}
	},
	field2 : {
		type : Number,
		default : 0
	},

	arrayField : {
		type : [String]
	},

	ref1 : {
		type : MyOtherModel
	}
});

Attributes

Attributes are reusable mixins for your model. An attribute can define extra fields, methods, indexes and events. For example the provided Timestamped attribute adds createdAt and updatedAt fields. It also updates the updatedAt value when the object is saved.

const MyAttribute = {

	// augment schema
	schema : {
		otherField : String,
		counter : {
			type : Number,
			default : 0
		}
	},


	// augment prototype
	methods : {
	
		doSomething() {
		
			this.otherField = 'Cool stuff';
		}
	
	},

	// called before saving to db
	onSave(db, model, updateOp) {
	
		// do something like change a value or increment a counter...
		model.counter++;

		// or set an $inc operator to make sure we are up-to-date with the db
		updateOp.increment({
			'counter' : 1
		});
	},

	// called after saving
	onSaved(db, model) {
		...
	},

	// called before delete
	onDelete(db, model) {
		
	},

	// Called after document was deleted
	onDeleted(db, result) {
	
	}

};

MyModel.AddAtribute(MyAttribute);

Index Definition

MyModel.DefineIndices({

	some_index_name : {
		fields: {
            'field1': 1,
            'field2': -1
        },

		options : {
			sparse : true
		}
			
	},

	my_text_index : {
		fields : {
			'$**' : 'text'
		}
	}
});

Embedded Documents

Persistent Document References

TODOs

  • Finish GeoJSON support implementation
  • Finish and test QueryBuilder
  • Document More
0.3.12

6 years ago

0.3.11

6 years ago

0.3.10

6 years ago

0.3.9

7 years ago

0.3.8

7 years ago

0.3.7

7 years ago

0.3.6

7 years ago

0.3.5

7 years ago

0.3.3

7 years ago

0.3.1

7 years ago

0.3.0

7 years ago

0.2.9

7 years ago

0.2.8

7 years ago

0.2.7

7 years ago

0.2.6

7 years ago

0.2.5

7 years ago

0.2.4

7 years ago

0.2.3

7 years ago

0.2.2

7 years ago

0.2.1

7 years ago

0.2.0

7 years ago

0.1.6

7 years ago

0.1.5

7 years ago

0.1.4

7 years ago

0.1.3

7 years ago

0.1.2

7 years ago

0.1.1

7 years ago

0.1.0

8 years ago