MongoDB本机节点驱动程序:解释已损坏

MongoDB Native Node Driver: Explain is Broken?

本文关键字:解释 已损坏 驱动程序 本机 节点 MongoDB      更新时间:2023-09-26

我无法使用 Node.js 的本机 mongodb 驱动程序获得正确的解释。当我使用mongo外壳时,一切都很好。我的语法有误吗?我还可能做错什么吗?

db.user.find({},{explain:true}).toArray
db.user.find({}).explain

我已经尝试了这两种方法,用户表中有两个文档,它给了我这个输出:

{ cursor: 'BasicCursor',
  isMultiKey: false,
  n: 1,
  nscannedObjects: 1,
  nscanned: 1,
  nscannedObjectsAllPlans: 1,
  nscannedAllPlans: 1,
  scanAndOrder: false,
  indexOnly: false,
  nYields: 0,
  nChunkSkips: 0,
  millis: 0,
  allPlans: 
   [ { cursor: 'BasicCursor',
       isMultiKey: false,
       n: 1,
       nscannedObjects: 1,
       nscanned: 1,
       scanAndOrder: false,
       indexOnly: false,
       nChunkSkips: 0 } ],
  server: 'Rocket.local:27017',
  filterSet: false,
  stats: 
   { type: 'LIMIT',
     works: 2,
     yields: 0,
     unyields: 0,
     invalidates: 0,
     advanced: 1,
     needTime: 1,
     needFetch: 0,
     isEOF: 1,
     children: [ [Object] ] } }

这是错误的。当我在 mongo shell 中运行相同的查询时,它会给出正确的输出:

"cursor" : "BasicCursor",
    "isMultiKey" : false,
    "n" : 2,
    "nscannedObjects" : 2,
    "nscanned" : 2,
    "nscannedObjectsAllPlans" : 2,
    "nscannedAllPlans" : 2,
    "scanAndOrder" : false,
    "indexOnly" : false,
    "nYields" : 0,
    "nChunkSkips" : 0,
    "millis" : 0,
    "server" : "Rocket.local:27017",
    "filterSet" : false,
    "stats" : {
        "type" : "COLLSCAN",
        "works" : 4,
        "yields" : 0,
        "unyields" : 0,
        "invalidates" : 0,
        "advanced" : 2,
        "needTime" : 1,
        "needFetch" : 0,
        "isEOF" : 1,
        "docsTested" : 2,
        "children" : []
    }

我也遇到了其他一些(相关问题)...

极限 = 1 = 1ms

,极限> 1 = 150ms(mongo-melt-down)

奇数MongoDB/节点解释结果

在我做了一堆低级分析和优化后,应该在驱动程序的 2.0.13 中修复。

看起来像一个 2.0.x 问题。已提交工单。

似乎是2.0.x驱动程序的问题:这是一个线程...

我刚刚用 2.0.x 和 1.4.x 运行了完全相同的查询。当限制 = 1 时,两者都执行快速 ~1ms。当 Limit = 2 时,1.4.x 版本保持在 1ms 左右,但 2.0.x 版本跳到 25ms。因此,这不仅仅是解释输出的问题 - 这只是问题的症状。

2015 年 1 月 8 日星期四上午 9:04:05 UTC-8,约书亚·艾布拉姆斯写道:有趣的...使用 1.4.x 的完全相同的查询会产生正确的解释,其中 n = 2(依此类推)。这会影响性能吗?当我运行 Limit = 1 的查询时,它很快(如预期的那样),但当 Limit = 2 时,它慢了 100 倍......

2015 年 1 月 8 日星期四上午 8:52:28 UTC-8,Christkv 写道:不是真的。我的建议是制作一个最小的可重现测试用例(代码和数据)并在 jira.mongodb.com 上打开一个票证。有点难以知道会发生什么。它不太可能是司机,但人们永远不知道。尝试使用 1.4.x 分支,至少排除它是 2.0.x 分支问题。

2015 年 1 月 8 日星期四下午 5:47:45 UTC+1,Joshua Abrams 写道:刚刚检查过,我使用的是驱动程序的 2.0.12。还有其他想法吗?

2015 年 1 月 8 日星期四上午 8:23:16 UTC-8,Christkv 写道: 解释只是重新调整驱动程序中的所有结果,而不是部分结果。 因此,您得到了计划。想到的一件事可能是您使用的是早于 1.4.19 的驱动程序,该驱动程序在 batchSize 设置为 1 时出错。

2015 年 1 月 8 日星期四下午 5:01:42 UTC+1,Joshua Abrams 写道: 我最近遇到了一系列驱动程序的性能问题。极限 = 1 = 1ms,极限> 1 = 150ms(mongo-melt-down)

不确定根本原因是什么 - 当我无法获得适当的解释时无法调试:MongoDB 本机节点驱动程序:解释已损坏?