uon.db v0.3.12
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
6 years ago
6 years ago
6 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
8 years ago