mongoose-findorcreate 
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) => {
// my new or existing model is loaded as result
})
// To search by one set of criteria and to save another set, simply use a second object:
MyModel.findOrCreate({ name: 'Mike' }, { slug: 'mike' }, (err, result) => {
// my new or existing model is loaded as result
})
Options
You can pass anoptions
object when adding the plugin to a schema or directly when using the method:// Like so...
MySchema.plugin(findOrCreate, { appendToArray: true, saveOptions: { validateBeforeSave: false } })
// And/or like so:
MyModel.findOrCreate({ name: 'Mike' }, { slug: 'mike' }, { appendToArray: true }, (err, result) => {
// my new or existing model is loaded as 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 options
saveIfFound
: 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