/mongomeili

Keep your Mongoose Schemas synced with MeiliSearch

Primary LanguageJavaScriptMozilla Public License 2.0MPL-2.0

MongoMeili License: MPL 2.0

Keep your MongooseJS Schemas synced with MeiliSearch

This plugin will automatically synchronise your Schemas with aa MeiliSearch index every time a new document is added, updated or removed.

You can also index the entire collection if you're just starting to use the plugin.

NodeJS Installation

Install using npm:

npm install mongomeili

Or with yarn:

yarn add mongomeili

Usage

With MongoMeili you can specify which which fields of your schema you'd like to index by adding a meiliIndex = true property to your schema as shown below:

// ES6
import mongoose from 'mongoose';
import mongomeili from 'mongomeili';

// ES5
const mongoose = require('mongoose');
const mongomeili = require('mongomeili');

// Add the '{ meiliIndex: true }' property to index these attributes with MeiliSearch
const MovieSchema = new mongoose.Schema({
  title: { type: String, required: true, meiliIndex: true },
  director: { type: String, required: true, meiliIndex: true },
  year: { type: String, required: true, meiliIndex: true }
});

// Specify your MeiliSearch credentials
MovieSchema.plugin(mongomeili, {
  host: 'https://...'
  apiKey: '...',
  indexName: '...' // Will get created automatically if it doesn't exist already
})

Options

Option name Type Description
host string The MeiliSearch Host
apiKey string The MeiliSearch API Key (often the Master Key)
indexName string The name of the index that will store the data from your schema

Methods

After applying the mongomeili plugin to your mongoose schema you will have access to the following methods:

Model.syncWithMeili(): Promise

Index the whole collection into your MeiliSearch index.

Model.clearMeiliSearchIndex(): Promise

Clears your MeiliSearch Index and sets _meiliIndex = false on the collection

Model.setMeiliIndexSettings(settings: {}): Promise

Set one or more settings of the MeiliSearch index, the full settings list is available here.

Model.meiliSearch({ query: string, params?: {}, populate?: boolean }): Promise

Search your MeiliSearch index for a specific query. You can customize the search parameters and populate information not indexed from the mongoDB collection as well.

You can find the full list of search parameters here.

The response will look like this:

{
  "hits": [
    {
      "_id": "5f86a08c27772b15560ff4af",
      "title": "Fast and Furious",
      "director": "Rob Cohen",
      "year": "2001"
    }
  ],
  "offset": 0,
  "limit": 20,
  "nbHits": 1,
  "exhaustiveNbHits": false,
  "processingTimeMs": 0,
  "query": "furious"
}

Development

After checking out the repo, run npm install --save-dev or yarn install --dev to install dependencies.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/Loophole-Labs/mongomeili. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

The MongoMeili project is available as open source under the terms of the Mozilla Public License Version 2.0.

Code of Conduct

Everyone interacting in the MongoMeili project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.

Project Managed By:

Loophole Labs