Model Factories define the platonic model, and can create model instances.
These models are extensions on VeryModel.
Creating a new model factory involves passing two arguments: an object describing each field, and an options object defining the configuration of the model (leveldb path, model name, etc).

Every root property of a model definition is a field name with an object value defining types, restrictions, and processing for a model field. In it's simplest form, a field definition can just be an empty object, and then you can assign anything to that field. If a field isn't mentioned in the defition, it won't be saved or loaded.

Most Model Factory and Model Instance methods require a callback.
Any method that does require a callback has an optional options object as the argument before the callback.

Most methods will take db, and bucket as options properties, which override the defaults set in factory.options.
Some methods will take pagination methods: offset and limit.
save, update, and delete methods can take a ctx object in options to pass on to the factory.options.onSave and factory.options.onDelete callbacks.

Callbacks are always required on functions that include them, and lead with an error-first approach.

Create makes a new instance of the model with specific data.
Any fields in the value_object that were not defined get thrown out.
Validations are not done on creation, but some values may be processed based on the field defintion type and processIn functions.

Create does not save the value; you'll have to run .save(function (err) { ... }) on the returned model instance.

The model instance's private .key field will not be set until it has been saved either.

Logging the model out to console will produce a confusing result.
If you want the model's data, run .toJSON() and use the result.

By default, fields marked private: true will not be saved, but you can override that with factory.options.savePrivate = true You can seperately mark fields as not saved in the field definition with save: false.

These destinctions are useful for things like password fields that you wouldn't want to be exposed to an API with toJSON, but do want to save.