0.4.0 • Published 11 months ago

mongoose-profiler v0.4.0

Weekly downloads
49
License
MIT
Repository
github
Last release
11 months ago

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

NameTypeDefaultDescription
isAlwaysShowQueryBooleantrue
durationNumber1000msShow the explain result when the query took more than this time.(The time from pre() to post().)
totalDocsExaminedNumberShow the explain result when the query examined documents more than this number.
levelStringCOLLSCANALL: 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.
0.4.0

11 months ago

0.3.0

3 years ago

0.2.1

4 years ago

0.1.0

5 years ago

0.0.2

5 years ago

0.0.1

5 years ago