mongoose-denormalize

Bidirectional denormalization for your Mongoose models

Usage no npm install needed!

<script type="module">
  import mongooseDenormalize from 'https://cdn.skypack.dev/mongoose-denormalize';
</script>

README

mongoose-denormalize

Bidirectional denormalization for your Mongoose models

Example

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 to denormalize the referenced User's username into each Post.

Post.plugin(denormalize, {
    username: { from: 'user' }
});

Upon saving a Post, this denormalizes the user (referenced by the key user) into user_username. The key in which denormalized data is stored can be overridden by specifying an alternate key option. Note that User's username is assumed to be of type String 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 any referencing models that are denormalizing User keys (i.e. username)- ensuring denormalized data is kept current.

User.plugin(denormalize, {
    username: { to: 'Post', ref: 'user' }
});

When a User is saved, the value of username will be updated in all Posts referencing the user (the referencing key is specified via the ref option). By default the username will be stored in user_username unless overridden by specifying a key option.

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