mongoose-findorcreate ![Travis](https://img.shields.io/travis/mtimofiiv/mongoose-findorcreate.svg)
A plugin for Mongoose which adds the findOrCreate method to models. The method will either append an existing object or save a new one, depending on wether it finds it or not.
There is already a mongoose-findorcreate
plugin, but it has not been maintained, and the author does not respond to issues or PRs.
This is why this package is called mongoose-find-or-create
Usage
When you create a schema, simply add this plugin like so:
const findOrCreate = require('mongoose-find-or-create')
const MySchema = new mongoose.Schema({
name: { type: String },
slug: { type: String }
})
MySchema.plugin(findOrCreate)
const MyModel = mongoose.model('Fruit', FruitSchema)
MyModel.findOrCreate({ name: 'Mike' }, (err, result) => {
})
MyModel.findOrCreate({ name: 'Mike' }, { slug: 'mike' }, (err, result) => {
})
Options
You can pass an options
object when adding the plugin to a schema or directly when using the method:
MySchema.plugin(findOrCreate, { appendToArray: true, saveOptions: { validateBeforeSave: false } })
MyModel.findOrCreate({ name: 'Mike' }, { slug: 'mike' }, { appendToArray: true }, (err, result) => {
})
The possible options are:
appendToArray
: if a field in the existing doc is an array, we can overwrite it (false
) or merely append to it (true
)saveOptions
: this object will be passed to the save()
method as a set of optionssaveIfFound
: default is true
- if set to false
, it will do creates where all data is saved, and will merely return the doc if it exists and not save the second parameter's fields.
Testing
npm run test
Contributing
PRs and issues are greatly appreciated, so please go ahead!