Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Automatically generate a unique and url-friendly alias/slug and store it in Mongoose
branch: master

Version bump 0.1.0

latest commit 40a49623f6
Andreas Hultgren authored
Failed to load latest commit information.
lib Implemented option to set max alias length
.gitignore Initial commit
Gruntfile.js Added jshint through grunt
Makefile Added jshint through grunt Updated docs about max length
package.json Version bump 0.1.0


Automatically generate a unique and url-friendly alias/slug and store it in Mongoose. For example for posts it's common to generate an alias/slug from the title.


Define your model like this:

var mongoose = require('mongoose'),
    monguurl = require('monguurl');

Post = new mongoose.schema({
  title: { type: String },
  slug: { type: string, index: { unique: true } }

  source: 'title',
  target: 'slug'

mongoose.model('Post', Post);

And then if you for example create a new document like this:

  title: 'This is so Äwesome!'

The slug will be automatically generated and stored in the database:

  "_id": "09876543...",
  "title": "This is so Äwesome!",
  "slug": "this-is-so-awesome"

Create another identical document and it will be stored like this:

  "_id": "09876543...",
  "title": "This is so Äwesome!",
  "slug": "this-is-so-awesome-2"

The ending number will increase to "-100", then it will be "-100-2". This is to avoid ruining intentional numbers such as "It's over 9000" or "A day in 2013". It's unlikely enough that either such a title is repeated or that the same title is used more than a hundred times anyway.

Also note that theoretically this plugin can be used without a source/title, if such behavior is desired. Just set the target field when creating the document and any source will be ignored.

Update: It's now also possible to set a max-length for aliases. Setting monguurl({ length: 40 }) will cut the alias approximately at the space (dash) closest before the limit. If there's no space/dash, the string will be cut off at the limit anyway. The final length might be up to 6 bytes longer to accomodate for appended numbers. The default length is 0, which is unlimited.


  • npm install monguurl --save


  • monguurl(options)
    Creates the mongoose plugin.
    • options.source (string) Path to the field which to generate the alias from.
      Default: 'title'
    • (string) path to the field where the alias should be stored.
      Default: 'alias'
  • urlProof(alias)
    Method used to make a string url-friendly. If you want a different method, just replace it.
Something went wrong with that request. Please try again.