MongoDB storage for BackboneORM
npm install backbone-mongo
BackboneMongo provides MongoDB storage for BackboneORM.
Because BackboneORM's query language is based on MongoDB's query language, many queries just work! With a twist...BackboneORM provides cross-collection relationships and embedded data for MongoDB.
In addition, BackboneMongo using CouchDB-style '_rev' versioning to ensure coherency of data.
class Change extends Backbone.Model
model_name: 'Change'
sync: require('backbone-orm').sync(Change)
class Task extends Backbone.Model
urlRoot: 'mongodb://localhost:27017/tasks'
schema:
project: -> ['belongsTo', Project]
changes: -> ['hasMany', Change, embed: true]
sync: require('backbone-mongo').sync(Task)
class Project extends Backbone.Model
urlRoot: 'mongodb://localhost:27017/projects'
schema:
tasks: -> ['hasMany', Task]
changes: -> ['hasMany', Change, embed: true]
sync: require('backbone-mongo').sync(Project)
var Change = Backbone.Model.extend({
model_name: 'Change',
});
Change.prototype.sync = require('backbone-orm').sync(Change);
var Task = Backbone.Model.extend({
urlRoot: 'mongodb://localhost:27017/tasks',
schema: {
project: function() { return ['belongsTo', Project]; }
changes: function() { return ['hasMany', Change, {embed: true}]; }
}
});
Task.prototype.sync = require('backbone-mongo').sync(Task);
var Project = Backbone.Model.extend({
urlRoot: 'mongodb://localhost:27017/projects',
schema: {
tasks: function() { return ['hasMany', Task]; }
changes: function() { return ['hasMany', Change, {embed: true}]; }
}
});
Project.prototype.sync = require('backbone-mongo').sync(Project);
Specific attributes can be indexed using the indexed
option.
You can use a custom id type (instead of the default ObjectID) in MongoDB by setting the manual_id
option.
class Task extends Backbone.Model
urlRoot: 'mongodb://localhost:27017/tasks?journal=true'
schema:
id: [indexed: true]
sync: require('backbone-mongo').sync(Task)
var Task = Backbone.Model.extend({
urlRoot: 'mongodb://localhost:27017/tasks',
schema: {
id: [indexed: true]
}
});
Task.prototype.sync = require('backbone-mongo').sync(Task);
You can globally configure BackboneMongo's connections using connection_options and can configure a specific collection using url query parameters.
# configure replicaset globally
require('backbone-mongo').configure {connection_options: {
retryMiliSeconds: 1000
numberOfRetries: 2*60
autoReconnect: true
}}
# set journalling for a specific model
class Task extends Backbone.Model
urlRoot: 'mongodb://localhost:27017/tasks?journal=true'
sync: require('backbone-mongo').sync(Task)
// configure replicaset globally
_.extend(require('backbone-mongo').connection_options, {
retryMiliSeconds: 1000,
numberOfRetries: 2 * 60,
autoReconnect: true,
readPreference: require('mongodb').ReadPreference.NEAREST
});
// set journalling for a specific model
var Task = Backbone.Model.extend({
urlRoot: 'mongodb://localhost:27017/tasks?journal=true',
});
Task.prototype.sync = require('backbone-mongo').sync(Task);