1

我在 MongoDB 中将游标分配给一个变量,如下所示:

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

wherename是集合的一个属性inventory。知道我的inventory收藏只有 4 个文档可能会有所帮助。

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

db.runCommand({cursorInfo:1});

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

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

4

1 回答 1

2

如果集合中的文档很少,则必须为此包含一个 batchSize() : db.items.find().batchSize(2)

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

由于您使用的是排序,我确信它们不是“名称”键上的索引,或者不超过 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 }
于 2013-05-28T00:48:24.313 回答