mongoose-partial-full-search
Version:
MongoDB partial and full text search support for mongoose
99 lines (73 loc) • 3.61 kB
Markdown
#mongoose-partial-full-search
======================
## This is a fork of mongoose-text-search, better documentation to come.
Provides MongoDB Partial(using $regex) and Full(using $text) text search support for mongoose.
[](https://travis-ci.org/aheckmann/mongoose-partial-full-search)
## Example:
```js
// modules
var mongoose = require('mongoose');
var textSearch = require('mongoose-partial-full-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.search('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](http://mongoosejs.com/docs/documents.html).
For more information about these properties, read the [MongoDB documentation](http://docs.mongodb.org/manual/reference/text-search/#text-search-output).
## Options
`mongoose-partial-full-search` supports passing an options object as the second argument.
- `project`: select which [fields](http://docs.mongodb.org/manual/reference/command/text/) to return (mongoose [field selection](http://mongoosejs.com/docs/api.html#query_Query-select) syntax supported)
- `filter`: declare an additional [query matcher](http://docs.mongodb.org/manual/reference/command/text/) using `find` syntax (arguments are cast according to the schema).
- `limit`: [maximum number](http://docs.mongodb.org/manual/reference/command/text/) of documents (mongodb default is 100)
- `language`: change the [search language](http://docs.mongodb.org/manual/reference/command/text/)
- `lean`: Boolean: if true, documents are not cast to [mongoose documents](http://mongoosejs.com/docs/documents.html) (default false)
Example:
```js
var options = {
project: '-created' // do not include the `created` property
, filter: { likes: { $gt: 1000000 }} // casts queries based on schema
, limit: 10
, language: 'spanish'
, lean: true
}
Game.search('game -mario', options, callback);
```
## Notes:
As of mongoose 3.6.0, text indexes may be added using the [Schema.index()](http://mongoosejs.com/docs/api.html#schema_Schema-index) method.
As of MongoDB 2.4.0, [text search](http://docs.mongodb.org/manual/applications/text-search/) is experimental/beta. As such, this functionality is not in mongoose core.