mongo命令行下迭代游标

db.collection.find()方法返回一个游标。要访问文档, 你需要遍历游标。然而,在mongo命令行,如果返回的游标使用var关键字没有赋值给一个变量,然后将游标会自动迭代20次,最多打印结果里拳20个文档。以下说明用手动迭代游标或使用迭代索引的方式来访问文档。

一、手动迭代游标

在mongo命令行下,当您分配从find()方法返回的游标给一个用var关键字命名的变量,游标不会自动迭代。

在mongo命令行下您可以调用游标变量迭代20次,然后打印匹配的文档,就像下面的例子:

var myCursor = db.inventory.find( { type: 'food' } );

myCursor

您也可以使用游标的next()方法来访问文档,就像下机的例子:

var myCursor = db.inventory.find( { type: 'food' } );

while (myCursor.hasNext()) {
   print(tojson(myCursor.next()));
}

作为一种替代的打印操作,考虑用printjson()辅助方法取代print(tojson()):

var myCursor = db.inventory.find( { type: 'food' } );

while (myCursor.hasNext()) {
   printjson(myCursor.next());
}

你可以使用游标的foreach()方法遍历游标访问文档,就像下面的例子:

var myCursor =  db.inventory.find( { type: 'food' } );

myCursor.forEach(printjson);

游标方法的更多信息查看JavaScript游标方法和你的驱动文档。

  [1]
   可以使用DBQuery.shellBatchSize改变默认值为20的迭代次数。更多信息请查看执行查询。

二、迭代索引

在mongo命令行下,你能用toArray()方法迭代游标返回文档到一个数组里,如下所示:

var myCursor = db.inventory.find( { type: 'food' } );
var documentArray = myCursor.toArray();
var myDocument = documentArray[3];

该toArray()方法加载游标返回的所有文档到RAM中;toArray()方法耗尽游标。

此外,一些驱动提供使用游标的索引(例如 cursor[index])访问文档。这是第一次调用toArray()方法,然后使用所产生的数组索引的快捷方式。

考虑下面的实例:

var myCursor = db.inventory.find( { type: 'food' } );
var myDocument = myCursor[3];

该myCursor[3]等效于下面的例子:

myCursor.toArray() [3];

京ICP备14008139号-1