Awesome
mongoose-keywords
Mongoose plugin that recursively generates keywords for documents based on its fields
Install
npm install --save mongoose-keywords
Usage
Single path
var mongoose = require('mongoose');
var ArtistSchema = new mongoose.Schema({
name: String
});
ArtistSchema.plugin(require('mongoose-keywords'), {paths: ['name']});
var Artist = mongoose.model('Artist', ArtistSchema);
var artist = new Artist({name: "L'arc~en~Ciel"});
console.log(artist.keywords); // ['larc en ciel']
Multiple path
var ArtistSchema = new mongoose.Schema({
name: String,
genre: String
});
ArtistSchema.plugin(require('mongoose-keywords'), {paths: ['name', 'genre']});
var Artist = mongoose.model('Artist', ArtistSchema);
var artist = new Artist({name: "L'arc~en~Ciel", genre: 'Jrock'});
console.log(artist.keywords); // ['larc en ciel', 'jrock']
Custom keywords
path options
You can still define a keywords
path on your schema with predefined options.
var ArtistSchema = new mongoose.Schema({
name: String,
keywords: {
type: [String],
unique: true // new custom option
}
});
ArtistSchema.plugin(require('mongoose-keywords'), {paths: ['name']});
Custom keywords
field
var ArtistSchema = new mongoose.Schema({
name: String
});
ArtistSchema.plugin(require('mongoose-keywords'), {
paths: ['name'],
field: 'terms'
});
var Artist = mongoose.model('Artist', ArtistSchema);
var artist = new Artist({name: "L'arc~en~Ciel"});
console.log(artist.keywords); // undefined
console.log(artist.terms); // ['larc en ciel']
Custom transform
option
By default, mongoose-keywords
normalizes the value, but you can provide your own transform function.
var mongoose = require('mongoose');
var ArtistSchema = new mongoose.Schema({
name: String
});
ArtistSchema.plugin(require('mongoose-keywords'), {
paths: ['name'],
transform: function (value) {
return value + '!!!';
}
});
var Artist = mongoose.model('Artist', ArtistSchema);
var artist = new Artist({name: "L'arc~en~Ciel"});
console.log(artist.keywords); // ["L'arc~en~Ciel!!!"]
Nested models
var mongoose = require('mongoose');
var mongooseKeywords = require('mongoose-keywords');
var GenreSchema = new mongoose.Schema({
title: String
});
GenreSchema.plugin(mongooseKeywords, {paths: ['title']});
var ArtistSchema = new mongoose.Schema({
name: String,
genre: {
type: mongoose.Schema.ObjectId,
ref: 'Genre'
}
});
ArtistSchema.plugin(mongooseKeywords, {paths: ['name', 'genre']});
var Genre = mongoose.model('Genre', GenreSchema);
var genre = new Genre({title: 'Jrock'});
console.log(genre.keywords); // ['jrock']
var Artist = mongoose.model('Artist', ArtistSchema);
var artist = new Artist({name: "L'arc~en~Ciel", genre: genre});
console.log(artist.keywords); // ['larc en ciel', 'jrock']
License
MIT © Diego Haz