mongoose-text-search
v0.0.2
Published
MongoDB 2.4 text search support for mongoose
Downloads
898
Readme
#mongoose-text-search
Provides MongoDB 2.4 text search support for mongoose.
Example:
// 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 (err, output) {
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 }
});
});
Output:
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.
Options
mongoose-text-search
supports passing an options object as the second argument.
project
: select which fields to return (mongoose field selection syntax supported)filter
: declare an additional query matcher usingfind
syntax (arguments are cast according to the schema).limit
: maximum number of documents (mongodb default is 100)language
: change the search language
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);
Notes:
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.