cursorInfo命令在MongoDB中不起作用

时间:2013-05-27 19:35:19

标签: mongodb cursor

我在MongoDB中将游标指定给一个变量:

var myCursor = db.inventory.find({},{'name':1}).sort({'name':1});

其中name是集合inventory的属性。知道我的inventory集合只有4个文档可能会有所帮助。

然后我使用以下代码使用cursorInfo命令:

db.runCommand({cursorInfo:1});

当我看到输出时,它声称totalOpen游标为0,游标的clientCursors_size为0,并且timedOut游标的数量也为0 。cursorInfo无法检测到myCursor有什么具体原因吗? (如果这是初学者的问题,我很抱歉,但我刚开始学习MongoDB。)

注意:我还尝试完全使用光标(通过myCursor)并检索光标中的一个项目(通过myCursor[0]),但我仍然得到相同的输出。

1 个答案:

答案 0 :(得分:2)

如果集合中的文档数量非常少,则必须包含batchSize():db.items.find()。batchSize(2)for

通过此链接了解光标行为:http://docs.mongodb.org/manual/core/read-operations/#cursor-behaviors

由于您正在使用排序,我确信它们不是'name'键的索引,或者不超过101个文档(或1 MB文档)。让我用一个例子来解释。

test:Mongo > db.runCommand({cursorInfo:1});
{ "totalOpen" : 2, "clientCursors_size" : 2, "timedOut" : 1, "ok" : 1 }
test:Mongo > var x = db.test2.find().sort({ a : -1}).batchSize(5);
test:Mongo > x.next()
test:Mongo > db.runCommand({cursorInfo:1});
{ "totalOpen" : 2, "clientCursors_size" : 2, "timedOut" : 1, "ok" : 1 }

因此,打开游标没有变化(查看我上面粘贴的文档),因为缺少{a:1}上的索引 现在让我们添加索引。

test:Mongo > db.test2.ensureIndex({ a : -1 })
test:Mongo > var x = db.test2.find().sort({ a : -1}).batchSize(5);
test:Mongo > db.runCommand({cursorInfo:1});
{ "totalOpen" : 2, "clientCursors_size" : 2, "timedOut" : 1, "ok" : 1 }
test:Mongo > x.next()
test:Mongo > db.runCommand({cursorInfo:1});
{ "totalOpen" : 3, "clientCursors_size" : 3, "timedOut" : 1, "ok" : 1 }