MongoDB本地节点驱动程序:解释是破碎?

我无法使用Node.js的本地mongodb驱动程序进行正确的解释。 当我使用蒙戈壳,一切都很好。 我的语法错了吗? 还有什么我可以做错的?

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" : [] } 

我也有一些其他(相关的问题),以及…

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

奇怪的MongoDB /节点解释结果

在进行了一系列低级分析和优化之后,应该在驱动程序的2.0.13中进行修复。

看起来像一个2.0.x的问题。 已经提交了票。

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

我只用2.0.x和1.4.x运行完全相同的查询。 当Limit = 1时,两者都执行快速〜1ms。 当Limit = 2时,1.4.x版本停留在1ms左右,但2.0.x版本跳转到25ms。 所以,这不仅仅是解释输出的问题 – 这只是问题的一个症状。

2015年1月8日,星期四上午9时04分05秒UTC-8,Joshua Abrams写道:有趣…完全相同的查询使用1.4.x产生一个适当的解释,其中n = 2(依此类推)。 这可能会影响性能? 当我运行一个查询,其中限制= 1它是快速(如预期),但当限制= 2时,它是100倍慢…

2015年1月8日星期四上午8:52:28 UTC-8,christkv写道:不是真的。 我的build议是做一个最小的可重复的testing用例(代码和数据),并在jira.mongodb.com上打开一张票。 很难知道会发生什么。 这不可能是司机,但从来不知道。 尝试1.4.x的分支,以及至less排除这是一个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日星期四下午05:01:42 UTC + 1,Joshua Abrams写道:我最近和司机一起遇到了一套性能问题。 Limit = 1 = 1ms,Limit> 1 = 150ms(mongo-melt-down)

不知道是什么原因造成的 – 当我无法得到正确的解释时,debugging是不可能的:MongoDB Native Node Driver:解释是破碎的?