我无法使用Node.js的本机mongodb驱动程序获得正确的解释。 当我使用mongo shell时,一切都很好。我的语法错了吗?还有什么我可能做错了吗?
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" : []
}
我还有一些其他(相关问题)......
答案 0 :(得分:1)
在我进行了一系列低级分析和优化之后,应该在驱动程序的2.0.13中修复。
答案 1 :(得分:0)
看起来像是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日星期四UTC-8上午9:04:05,Joshua Abrams写道:有趣......完全相同的查询使用1.4.x产生正确的解释,其中n = 2(依此类推)。这会影响性能吗?当我运行一个Limit = 1的查询时,它的速度很快(正如预期的那样),但是当Limit = 2时,速度会慢100倍......
2015年1月8日星期四UTC-8上午8:52:28,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日星期四UTC-8上午8:23:16,christkv写道:解释只是重新调整驱动程序中的所有结果而不是部分结果。因此你得到了计划。我想到的一件事可能是你在1.4.19之前的驱动程序上遇到错误,其中batchSize设置为1。
2015年1月8日星期四下午5:01:42 UTC + 1,Joshua Abrams写道:我最近遇到了一系列与驱动程序有关的性能问题。限制= 1 = 1毫秒,限制> 1 = 150ms(mongo-melt-down)
不确定它的根本原因 - 当我无法得到正确的解释时,无法进行调试:MongoDB本机节点驱动程序:解释是否已损坏?