Объясните запрос мангуста с помощью библиотеки монахов - PullRequest
0 голосов
/ 27 сентября 2018

Я использую monk npm , чтобы объяснить запрос в мангусте.

const mongoose = require('mongoose');

mongoose.set('debug', function(collection, method, query, doc) {
    if (method === 'ensureIndex') return;

    console.log('');
    console.log('=== Mongoose query ===');
    console.log('');
    console.log(collection, method, query, doc);

    var explainDoc = Object.create(doc);
    explainDoc.explain = true;

    const db = monk.get(collection, { castIds: false });
    db[method](query, explainDoc, function(err, doc) {
        if (err) return console.err(err);

        console.dir(doc, { depth: null, colors: true });
    })
});

, но выдает ошибку, такую ​​как

Ошибка типа: db [метод] не является функцией

с методом findAndModify .В противном случае, метод update , findOne кажется, объясните запрос нормально !.

Журнал с моей консоли

=== Mongoose query ===

categories findOne { _id: '64824C9DC59340928A01F6338A2F6453' } { fields: {} }

=== Mongoose query ===

categories update { _id: '64824C9DC59340928A01F6338A2F6453' } { '$set': { updateAt: 2018-09-27T02:58:59.906Z } }
{ queryPlanner: 
   { plannerVersion: 1,
     namespace: 'xxxxx.categories',
     indexFilterSet: false,
     parsedQuery: { _id: { '$eq': '64824C9DC59340928A01F6338A2F6453' } },
     winningPlan: { stage: 'IDHACK' },
     rejectedPlans: [] },
  executionStats: 
   { executionSuccess: true,
     nReturned: 1,
     executionTimeMillis: 0,
     totalKeysExamined: 1,
     totalDocsExamined: 1,
     executionStages: 
      { stage: 'IDHACK',
        nReturned: 1,
        executionTimeMillisEstimate: 0,
        works: 2,
        advanced: 1,
        needTime: 0,
        needYield: 0,
        saveState: 0,
        restoreState: 0,
        isEOF: 1,
        invalidates: 0,
        keysExamined: 1,
        docsExamined: 1 },
     allPlansExecution: [] },
  ok: 1 }

=== Mongoose query ===

categories findAndModify { parent: '64824C9DC59340928A01F6338A2F6453' } []
/Volumes/Data/Loint/XXXX/product/ml-sync-revo/dist/model/category.js:54
    db[method](query, explainDoc, function(err, doc) {
              ^

TypeError: db[method] is not a function

Итак, мой вопрос:

  1. Как объяснить каждый запрос на монго с использованием monk?
  2. monkПохоже, просто определить индекс попадания в запросе, чтобы оценить производительность запроса, в другом сложном решении, есть ли решение для оптимизации производительности запроса (бенчмарк, ... бла-бла ..)
...