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];