mongoose-text-search

MongoDB 2.4 text search support for mongoose

#mongoose-text-search

Provides MongoDB 2.4 text search support for mongoose.

// modules 
var mongoose = require('mongoose');
var textSearch = require('mongoose-text-search');
 
// create our schema 
var gameSchema = mongoose.Schema({
    name: String
  , tags: [String]
  , likes: Number
  , created: Date
});
 
// give our schema text search capabilities 
gameSchema.plugin(textSearch);
 
// add a text index to the tags array 
gameSchema.index({ tags: 'text' });
 
// test it out 
var Game = mongoose.model('Game', gameSchema);
 
Game.create({ name: 'Super Mario 64', tags: ['nintendo', 'mario', '3d'] }, function (err) {
  if (err) return handleError(err);
 
  Game.textSearch('3d', function (erroutput) {
    if (err) return handleError(err);
 
    var inspect = require('util').inspect;
    console.log(inspect(output, { depth: null }));
 
    // { queryDebugString: '3d||||||', 
    //   language: 'english', 
    //   results: 
    //    [ { score: 1, 
    //        obj: 
    //         { name: 'Super Mario 64', 
    //           _id: 5150993001900a0000000001, 
    //           __v: 0, 
    //           tags: [ 'nintendo', 'mario', '3d' ] } } ], 
    //   stats: 
    //    { nscanned: 1, 
    //      nscannedObjects: 0, 
    //      n: 1, 
    //      nfound: 1, 
    //      timeMicros: 77 }, 
    //   ok: 1 } 
  });
});

The output is not limited to the found documents themselves but also the complete details of the executed command.

The results property of the output is an array of objects containing the found document and its corresponding search ranking. score is the ranking, obj is the mongoose document.

For more information about these properties, read the MongoDB documentation.

mongoose-text-search supports passing an options object as the second argument.

Example:

var options = {
    project: '-created' // do not include the `created` property 
  , filter: { likes: { $gt: 1000000 }}
  , limit: 10
  , language: 'spanish'
}
 
Game.textSearch('game -mario', options, callback);

As of mongoose 3.6.0, text indexes must be added using the Schema.index() method.

As of MongoDB 2.4.0, text search is experimental/beta. As such, this functionality is not in mongoose core.