mongoose-profiler

0.4.0 • Public • Published

mongoose-profiler

npm version Language grade: JavaScript Coverage Status Actions Status

This is a mongoose plugin for tuning performance.
It will show the 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

$ npm install mongoose-profiler --save-dev

Quick start

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.

ProductModel
  .where({state: 'active'})
  .where({owner: {$in: ['5c9d9428e7462d3d989cb69b', '5c9d95acea5c9b4036d97c88']}})
  .limit(100);
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()

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.

Readme

Keywords

Package Sidebar

Install

npm i mongoose-profiler

Weekly Downloads

282

Version

0.4.0

License

MIT

Unpacked Size

11.9 kB

Total Files

6

Last publish

Collaborators

  • kelp404