如何在 Node.js 猫鼬中使用 explain()

How to use explain() in Node.js mongoose

我试图在我的控制台上查看 executionStats,但我总是得到 undefined[object, object]。我只有一个简单的查询,我想在其中查看一些统计信息。有人可以解释为什么这不起作用吗?如果我只是使用我的查询进行查询(而不使用 explain()),则查询成功。

这是我在尝试对所有其他代码使用 explain 时的查询。我想查看查询的性能,所以我发现获得性能时间的最佳方法是使用 explain().

  const timeFunction2 = new Promise((resolve, reject) => {
    var startTime = performance.now();

    setTimeout(() => {

      conn.collection('galery').find({ "user_id": req.session.userId}).explain("executionStats", (err, explain) => {
        console.log('MongoDebug: ' + explain[0]);
      });

      var endTime = performance.now();
      resolve(endTime - startTime);
    });
  });

  timeFunction2.then(time => {
    console.log(`${time} ms.`);
  });

这是我的查询代码,我可以在其中成功获取数据并将其显示在我的页面上

  const timeFunction2 = new Promise((resolve, reject) => {
    var startTime = performance.now();

    setTimeout(() => {


conn.collection('galery').find({ "user_id": req.session.userId}).toArray( (err, resultImg) =>{
.
.
.
});

      var endTime = performance.now();
      resolve(endTime - startTime);
    });
  });

  timeFunction2.then(time => {
    console.log(`${time} ms.`);
  });

这是我 MongoDB 调试的输出:

MongoDebug:  {
  queryPlanner: {
    plannerVersion: 1,
    namespace: 'nodejsnosql.galerija',
    indexFilterSet: false,
    parsedQuery: { uporabnik_id: [Object] },
    winningPlan: { stage: 'COLLSCAN', filter: [Object], direction: 'forward' },
    rejectedPlans: []
  },
  executionStats: {
    executionSuccess: true,

    nReturned: 3,
    executionTimeMillis: 0,
    totalKeysExamined: 0,
    totalDocsExamined: 5,
    executionStages: {
      stage: 'COLLSCAN',
      filter: [Object],
      nReturned: 3,
  ok: 1,
  '$clusterTime': {
    clusterTime: new Timestamp({ t: 1644428067, i: 1 }),
    signature: {
      hash: new Binary(Buffer.from("71a216b111009bfcef6bd4923029d8df7a219e1a", "hex"), 0),
      keyId: new Long("7027534341366349828")
    }
  },
  operationTime: new Timestamp({ t: 1644428067, i: 1 })
}

您需要更改将说明对象记录到控制台的方式。

      conn.collection('galery').find({ "user_id": req.session.userId}).explain("executionStats", (err, explain) => {
        console.log('MongoDebug: ' + explain[0]);
      });

通过使用 'MongoDebug: ' + explain[0],您在 explain[0] 上隐式调用 .toString(),因为您将它附加到一个字符串,因此它必须是一个字符串。对于对象,这会将它们转换为 [object, Object].

相反,您可以将其作为单独的对象传递给您的 console.log:

console.log('MongoDebug: ', explain);

或将其转换为带有额外间距的 JSON 以提高可读性:

console.log(JSON.stringify(explain, null, 2));