我使用GridFs来保存数百万个文件。 获取所有文件的列表时,大的结果集会导致Mongo失败。使用python时,我通过使用find()的空过滤器来处理这种情况:
client = MongoClient("192.168.0.13")
db = client.test
fs = gridfs.GridFS(db)
for f in fs.find():
#..relevant python code
这种方法有效,因为我从.find()
获取了一个游标对于Scala和Casbah,我找不到这样做的方法。无论我做什么,Mongo都会尝试对结果集执行一些操作,超出分配给它正在执行的任何特定操作的内存限制。 我的scala测试代码是:
val mongoClient = MongoClient("192.168.0.13")
val db = mongoClient("test")
val gridfs = GridFS(db)
for(f <- gridfs) println(f.filename)
运行此代码会导致:
线程“main”中的异常com.mongodb.MongoException:运行错误:溢出排序阶段缓冲数据使用33554552字节超出内部限制33554432字节
我无法设法从Casbah获取GridFs访问的游标。我该怎么做?