https://github.com/dial-once/node-mongoat
MongoDB lightweight wrapper adding hooks (pre/post), auto createdAt/updatedAt, in a native MongoDB experience
https://github.com/dial-once/node-mongoat
javascript mongodb nodejs
Last synced: 9 months ago
JSON representation
MongoDB lightweight wrapper adding hooks (pre/post), auto createdAt/updatedAt, in a native MongoDB experience
- Host: GitHub
- URL: https://github.com/dial-once/node-mongoat
- Owner: dial-once
- License: mit
- Created: 2015-11-01T17:56:59.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2017-03-28T14:01:27.000Z (almost 9 years ago)
- Last Synced: 2025-03-03T03:18:12.585Z (10 months ago)
- Topics: javascript, mongodb, nodejs
- Language: JavaScript
- Homepage:
- Size: 3.8 MB
- Stars: 14
- Watchers: 10
- Forks: 4
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Mongoat
[](https://www.codacy.com/app/dialonce/node-mongoat) [](https://www.codacy.com/app/dialonce/node-mongoat)  [](http://inch-ci.org/github/dial-once/node-mongoat)

## Description
Mongoat is a [MongoDB](https://www.mongodb.org/) lightweight wrapper adding hooks (pre/post), automatic createdAt/updatedAt, in a native MongoDB experience. It is written on top of the [mongodb npm package](https://github.com/mongodb/node-mongodb-native).
It does not provides any ODM, model specifications, validation, or things that would force you to use it in a specific way. Mongoat is designed to be used in a MongoDB way: your way.
## Features
- Hooks (pre/post actions: afterSave, beforeSave, etc.)
- Datetime documents easily (createdAt & updatedAt)
- Native MongoDB experience and usage (you actually use the native MongoDB driver when you use Mongoat)
- Versions documents easily (Vermongo specifications)
## ToDo:
- Event triggering on oplog actions
## Installation
```
npm install mongoat
```
## Basic usage
```javascript
var mongoat = require('mongoat'); //instead of require('mongodb');
```
And then your ``mongoat`` object is to be used like the MongoDB native node.js driver. We just add some features on top of it, see below:
## Hooks
You can add multiple before and after hooks for insertions, updates and removals:
### before hooks:
```javascript
db.collection('collectionName').before('insert', function (docToInsert) {
// triggered when calling to insert()
});
db.collection('collectionName').before('update', function (docToUpdate) {
// triggered when calling to update() or findAndModify()
});
db.collection('collectionName').before('remove', function (docToRemove) {
// triggered when calling to remove()
});
```
### after hooks:
```javascript
db.collection('collectionName').after('insert', function (docToInsert) {
// triggered when calling to insert()
});
db.collection('collectionName').after('update', function (docToUpdate) {
// triggered when calling to update() or findAndModify()
});
db.collection('collectionName').after('remove', function (docToRemove) {
// triggered when calling to remove()
});
```
## Datetime
Enable datetime feature:
```javascript
db.collection('collectionName').datetime(true); // Default is false
```
### createdAt:
it will add a `createdAt` field to all new inserted documents using:
```javascript
db.collection('collectionName').insert(document, options);
```
or using one of the following method within the option `upsert: ture`
```javascript
db.collection('collectionName').update(query, update, options);
db.collection('collectionName').findAndModify(query, sort, update, options);
```
### updatedAt:
it will add a `updatedAt` field to all updated documents using:
```javascript
db.collection('collectionName').update(query, update, options);
// or
db.collection('collectionName').findAndModify(query, sort, update, options);
```
## Versioning
Enable versioning feature:
```javascript
db.collection('collectionName').version(true); // Default is false
```
Enabling this feature for a collection, so each time you perform an insert/update/remove it will create a document in the collection collectionName.vermongo and increment the version of the updated document. The `_id` in this collection is a composite ID, `{ _id: _id, _version: _version }`.
The document in the MyCollection collection will also receive a _version field.
If we want to restore a version
```javascript
db.collection('collectionName').restore(id, version);
```
* id of the document to restore is required
* if version is greater than 0, it will be considered as the version to restore
* if version is equal or lower than 0, it will be considered as the starting
* if version is not provided, it will takes default value 0
point of the version to restore (starting form last) ex:
```javascript
db.collection('collectionName').restore(id, 0); // restore the last version
```
```javascript
db.collection('collectionName').restore(id, -2); // restore the last version -2
```
more about versioning feature [here](https://github.com/thiloplanz/v7files/wiki/Vermongo)
## Tests
1. Run a MongoDb server if not yet
2. Run tests ``` npm test```
Or to show up code coverage ``` npm run cover ```
it will generate ``` ./coverage ``` folder
## Contribution
Please read our [Contributing Guidlines](CONTRIBUTING.md) before submitting a pull request or an issue !
## License
The MIT License [MIT](LICENSE)
Copyright (c) 2015 Dial Once