Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kelp404/mongoose-profiler
A performance tuning tool for Mongoose. Show explain results when the query is slow.
https://github.com/kelp404/mongoose-profiler
mongodb mongoose
Last synced: 14 days ago
JSON representation
A performance tuning tool for Mongoose. Show explain results when the query is slow.
- Host: GitHub
- URL: https://github.com/kelp404/mongoose-profiler
- Owner: kelp404
- License: mit
- Created: 2019-04-12T02:38:38.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-06-17T05:25:34.000Z (over 1 year ago)
- Last Synced: 2024-10-28T06:57:44.067Z (17 days ago)
- Topics: mongodb, mongoose
- Language: JavaScript
- Homepage:
- Size: 110 KB
- Stars: 11
- Watchers: 3
- Forks: 2
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# mongoose-profiler
[![npm version](https://badge.fury.io/js/mongoose-profiler.svg)](https://www.npmjs.com/package/mongoose-profiler)
[![Language grade: JavaScript](https://img.shields.io/lgtm/grade/javascript/g/kelp404/mongoose-profiler.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/kelp404/mongoose-profiler/context:javascript)
[![Coverage Status](https://coveralls.io/repos/github/kelp404/mongoose-profiler/badge.svg?branch=master&a)](https://coveralls.io/github/kelp404/mongoose-profiler?branch=master)
[![Actions Status](https://github.com/kelp404/mongoose-profiler/workflows/test%20and%20upload%20coveralls/badge.svg)](https://github.com/kelp404/mongoose-profiler/actions)This is a [mongoose](https://mongoosejs.com) plugin for tuning performance.
It will show the [explain results](https://docs.mongodb.com/manual/reference/explain-results/) on the console when the query is slow. Such as mongodb scans all documents in the collection without index.**Don't use it on production!!**
## Installation
```bash
$ npm install mongoose-profiler --save-dev
```## Quick start
```js
const mongooseProfiler = require('mongoose-profiler');
schema.plugin(mongooseProfiler());
```When you execute this query without the index then you will get some messages on the console.
```js
ProductModel
.where({state: 'active'})
.where({owner: {$in: ['5c9d9428e7462d3d989cb69b', '5c9d95acea5c9b4036d97c88']}})
.limit(100);
```
```base
Mongoose: 64ms Products.find({ state: 'active', owner: { '$in': [ ObjectId("5c9d9428e7462d3d989cb69b"), ObjectId("5c9d95acea5c9b4036d97c88") ] } }, { skip: 0, limit: 100 })
[ { queryPlanner:
{ plannerVersion: 1,
namespace: 'database.Products',
indexFilterSet: false,
parsedQuery:
{ '$and':
[ { state: { '$eq': 'active' } },
{ owne:
{ '$in':
[ ObjectID {
_bsontype: 'ObjectID',
id: Buffer [Uint8Array] [ ... ] },
ObjectID {
_bsontype: 'ObjectID',
id: Buffer [Uint8Array] [ ... ] } ] } } ] },
winningPlan:
{ stage: 'LIMIT',
limitAmount: 100,
inputStage:
{ stage: 'COLLSCAN',
filter:
{ '$and':
[ { state: { '$eq': 'active' } },
{ owne:
{ '$in':
[ ObjectID {
_bsontype: 'ObjectID',
id: Buffer [Uint8Array] [ ... ] },
ObjectID {
_bsontype: 'ObjectID',
id: Buffer [Uint8Array] [ ... ] } ] } } ] },
direction: 'forward' } },
rejectedPlans: [] },
executionStats:
{ executionSuccess: true,
nReturned: 1,
executionTimeMillis: 0,
totalKeysExamined: 0,
totalDocsExamined: 9,
executionStages:
{ stage: 'LIMIT',
nReturned: 1,
...
inputStage:
{ stage: 'COLLSCAN',
filter:
{ '$and':
[ { state: { '$eq': 'active' } },
{ owne:
{ '$in':
[ ObjectID {
_bsontype: 'ObjectID',
id: Buffer [Uint8Array] [ ... ] },
ObjectID {
_bsontype: 'ObjectID',
id: Buffer [Uint8Array] [ ... ] } ] } } ] },
nReturned: 1,
...
docsExamined: 9 } },
allPlansExecution: [] },
serverInfo:
{ ... },
ok: 1 } ]
```## mongooseProfiler()
```js
const mongooseProfiler = require('mongoose-profiler');
schema.plugin(mongooseProfiler({
isAlwaysShowQuery: true,
duration: 1000,
totalDocsExamined: 1000,
level: 'COLLSCAN',
logger: {
info: console.info,
error: console.error
}
}));
```
### Options
Name | Type | Default | Description
:------------------|:------------|:---------|:------------
isAlwaysShowQuery | Boolean | true |
duration | Number | 1000ms | Show the explain result when the query took more than this time.
(The time from `pre()` to `post()`.)
totalDocsExamined | Number | | Show the explain result when the query examined documents more than this number.
level | String | COLLSCAN |`ALL`: Show the explain result of all queries.
`COLLSCAN`: Show the explain result when the mongodb scan collections.
logger | {info: function, error: function} | | Custom console log.