Bidirectional denormalization for your Mongoose models
npm install mongoose-denormalizemongoose-denormalize
====================
Bidirectional denormalization for your Mongoose models
Example
-------
``javascript
var mongoose = require('mongoose');
var denormalize = require('mongoose-denormalize');
var User = new mongoose.Schema({
username: String
});
var Post = new mongoose.Schema({
user: { type: mongoose.Schema.ObjectId, ref: 'User' }
});
Post.plugin(denormalize, {
username: { from: 'user' }
});
User.plugin(denormalize, {
username: { to: 'Post', ref: 'user' }
});
`
Usage
-----
#### Denormalizing from a foreign model ####
In the example above each Post references a User. Suppose we'd like toUser
denormalize the referenced 's username into each Post.
`javascript`
Post.plugin(denormalize, {
username: { from: 'user' }
});Post
Upon saving a , this denormalizes the user (referenced by the key user) intouser_username. The key in which denormalized data is stored can be overridden bykey
specifying an alternate option. Note that User's username is assumed to beString
of type unless a type option is specified above.
#### Denormalizing into a referencing model ####
In the example above, when we update a User, we'd like to push values to anyUser
referencing models that are denormalizing keys (i.e. username)- ensuring
denormalized data is kept current.
`javascript`
User.plugin(denormalize, {
username: { to: 'Post', ref: 'user' }
});
When a User is saved, the value of username will be updated in all Postsref
referencing the user (the referencing key is specified via the option).username
By default the will be stored in user_username unless overridden bykey` option.
specifying a
Install
-------
npm install mongoose-denormalize
Tests
-----
make test
You can optionally specify the MongoDB URI to be used for tests:
MONGODB_URI=mongodb://localhost:27017/mongoose_denormalize_tests make test